• ベストアンサー

jQuery|要素だけを変更できますか?

こんにちは、 現在、jQueryを勉強中なのですが、要素だけを変更することは可能なのでしょうか?例えば以下の<h1>タグを<h2>に変えたい、といった具合です。 <h1> wanna replace heading 1 with heading 2 </h1> .htmlも.replaceWithも、テキストの内容ごと変えてしまうので、「要素だけ」を変更することができません。何か大きな勘違いをしていましたら、ご指摘いただければ幸いです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140045
noname#140045
回答No.2

チョット、確認していないのでハッキリとわかりませんが、 <h1>テキスト</h1> の「テキスト」部分は $("h1").text() で、取得できますので .repladeWith() と、組み合わせて $("h1").replaceWith("<h2>"+$("h1").text+"</h2>") みたいにして、できないでしょうか。

salt_on_all
質問者

お礼

お礼が遅くなってしまってごめんなさい。 実際に試してみましたが、ばっちり機能しました。そしてこれが一番スマートですね。使わせていただきます。 ありがとうございました!

その他の回答 (3)

  • my--
  • ベストアンサー率89% (91/102)
回答No.4

>>No.3  $.fn.myMethod = function(arg) {   return this.replaceWith($(arg).text(this.text()));  }; これにはバグがありますね。ゴメンなさい。

salt_on_all
質問者

お礼

ありがとうございました!

  • my--
  • ベストアンサー率89% (91/102)
回答No.3

(function($) {  $.fn.myMethod = function(arg) {   return this.replaceWith($(arg).text(this.text()));  }; })(jQuery); $('h1').myMethod('<h2 />'); プラグインを眺めてると、こんな感じで拡張されていますよね。 (function($) {  $.fn.extend({   method1: function() {    ...    return this;   },   method2: function() {    ...    return this;   }  }); })(jQuery); オレオレ的なメソッドの公開なら、extendでまとめとけばよいかも。

salt_on_all
質問者

お礼

お礼が遅くなってしまってごめんなさい。 自分で命令を作っちゃうってことですよね?ハードル高いですけど、本当に必要に迫られたときにはチャレンジしてみようと思います。ありがとうございました!

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

jqueryはよく知りませんが、 現在の内容を入れ直してあげるとかではダメでしょうか? $("h1").each(function(){  $(this).replaceWith("<h2>" + $(this).html() + "</h2>"); });

salt_on_all
質問者

お礼

ご回答ありがとうございます。 それなら可能です。ただ要素の入れ替えというのは、1番はじめに覚える命令としてあっても良さそうなので・・当方の勝手な思い込みかもしれないですね・・。使いそうで使わない気もしますし。ありがとうございました。

salt_on_all
質問者

補足

ちなみに、今のところ一番簡潔なのは、<h2>で「wrap」してから、「remove」で<h1>を消す、という方法でしょうか。

関連するQ&A

  • Jqueryで最初の要素だけ特定のCSSを適応

    Jqueryで最初の要素だけ特定のCSSを適応させたいのですが、うまくいきません。 やりたい事は、ページ内の一番初めのH2要素にだけ、「.top」というCSSを適応させたいのです。 現在は ※Jqueryソース $(function(){ $("h2:first").addClass("top"); }); ※CSSソース .top { padding-top: 2px; background-position: 0px 2px; } こんな感じで書いていますが、うまくいきませんでした。 記述の間違いなどご指摘頂ければ幸いです。 どうぞ宜しくお願い申し上げます。m(_ _)m

  • JQueryでxmlns属性(セミコロン:)付きの要素にアクセスする

    JQueryでxmlns属性付きの要素にアクセスする方法がわかりません。 <tag:hoge>text</tag:hoge> のようなタグにアクセスしたいのですが、 find("tag") find("tag:hoge") find("hoge") のいずれでもアクセスできずこまってます。 よろしくお願いします。

  • jqueryのthisはイベントが起きている要素?

    jqueryのthisはイベントが起きている要素を示すそうですが、 下記の例の.js-is-input-error1をthisにしても必須項目と出てきません。 こちらの例であればイベントが発生している要素とは、必須項目というテキストが出て来るspanタグがそれに該当する要素ではないのでしょうか? https://codepen.io/anon/pen/VmgPav アニメーションなら動いている要素が、イベントが発生している要素ということでしょうか? イベントが発生している要素というのがどうもはっきりわかりません。 アニメーションなら、(div.anime).animation()ならdiv.animeがイベントが発生している要素ですよね。 (button).click() { (div.anime).animation() } であればbuttonではなくdiv.animationがイベントが起きている要素ですよね?

  • 画像(alt要素)のマークアップとSEO

    質問です。 最近、検索エンジンのクローラーはaltを認識していないと、このページを読んで知りました。 http://www.hyperposition.com/ranking/heading.html ということは、画像のalt要素に<h1><h2>や<strong>タグをつけるのは無意味なんでしょうか? 私のサイトは、タイトルにロゴを使用しているので、どうしても画像に<h1>タグがくる構成になっています。 認識しない要素に見出しタグをつけると、スパム扱いになったりするんでしょうか? 上のアドレスのページにも、最後のほうに「画像はマークアップしない」とありますし・・・SEO的にはどうなんでしょう?

    • ベストアンサー
    • HTML
  • jquery select要素のdisplay:noneについて

    jqueryを使用して、要素の表示・非表示をさせたいのですが、 下記、コードで問題が出ています。 <html> <head> </head> <script src="js/jquery-1.2.6.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $(".dis").toggle( function(){ $("table.displayArea").attr("style","display:block"); }, function(){ $("table.displayArea").attr("style","display:none"); } ); }); </script> <body> <a href="#" class="dis">test</a> <table class="displayArea" style="display:none"> <tr> <td><select name=""> <option selected="selected">選択</option> </select></td> </tr> </table> </body> </html> aタグをクリックするとselectフォームがちゃんと表示されるんですが、 再度クリックしてもselectフォームが非表示にされません。 試しに、フォームでなくただのテキスト文字にしてみると、 ちゃんと、表示・非表示がうまくいきます。 その他のフォーム要素も試してみたのですが、問題ありませんでした。 なのでselect要素だけちゃんと非表示されないようです。 何が原因なのかお分かりになる方がいらっしゃいましたら、 ご教授いただけると幸いです。

  • jqueryでのscript要素の書き出し

    こんにちは。 ただいま、Jqueryとjavascriptの練習で、 ニコニコなどの動画サイトのURLをinput要素に入力すると動的にサムネイル画像を表示させるようなことにチャレンジしています。 躓いているのはニコニコの以下のURLなのですが、 http://www.nicovideo.jp/watch/sm6743695 このようなURLから”sm6743695”を抜き出し、javascriptで以下のようなスクリプトを生成しました。 <script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/sm6743695?w=260&h=180"></script> この文字列が格納された変数scriptをJqueryにより画面に書き出すと、 $('display-movie').html(script); 上書きはされているようなのですが、動画を読み込みません。 書き込み前 <p id ="display-movie">movie(確認用文字列)</p> 書き込み後 <p id ="display-movie"></p> また、確認の為にスクリプトを直接HTMLに書いて再読み込みしてみると、動画は正しく表示されます。 スクリプト要素のsrcのリンクを直接ブラウザに入れてアクセスしてみると、スクリプトのソースらしきものは正しく読んでいるようです。 このような要素は、initのように・・何らかの方法で動作させないと作動しないものなのでしょうか。 雑多な質問で申し訳ありませんが、お気づきのことがありましたら教えて頂けますと幸いです。 宜しくお願い申し上げます。

  • 【jQuery】西暦を指定せずに動かす方法

    以下のサイトを参考にして、HTMLのテキスト表示を期間ごとに違う内容を表示するようにしたいと思っています。 ※ 日時指定で要素の表示と非表示を切り替えるjQuery(http://ur0.work/wBe4) <例> 変更前)こんばんは⇒変更後)おはようございます! 変更前)夏になりました⇒変更後)冬になりました しかし、このjQueryは西暦を指定しなければなりません。 西暦を入力しなくても動くように、変更したいのですがどうすればよいでしょうか? 僕の能力では半日かかっても分かりませんでしたので、是非教えて頂きたく存じます! 何卒宜しくお願い致します!

  • jQueryのloadのcallbackが変な動作

    jQueryのloadメソッドでCallBackが成功しているにも関わらず失敗する場合があります・・・対象方法が全くわからないのでご教示願えませんでしょうか? 【A.html】 <script type="text/javascript" src="jquery-1.4.1.min.js"></script> <table> <tr> <td><div id = "target_1"><div id = "target_2"></td> </tr> </table> <script type="text/javascript"> $.ajaxSetup({ cache: false }); var xmlHttp; xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", "A.html", false); xmlHttp.send(null); alert(xmlHttp.responseText); $(document).ready(function(){ $("#target_1").load("a.txt .tag", function(Text, status) { if ($("#target_1").text() == "あああ") { $("#target_1").replaceWith("<img src = 'a.png'>"); else if ($("#target_1").text() == "いいい") $("#target_1").replaceWith("<img src = 'b.png'>"); alert( "text: " + Text + "\nstatus: " + status ); }); $(document).ready(function(){ $("#target_1").load("a.txt .tag", function(Text, status) { if ($("#target_1").text() == "あああ") { $("#target_2").load("a.txt .5tag");★ else if ($("#target_1").text() == "いいい") $("#target_2").load("a.txt .5tag");★ alert( "text: " + Text + "\nstatus: " + status ); }); }); 問題は★印が付いているところの処理です。 アラートではSUCCESSになるのですが、なぜかロードが失敗する時があります。 割合としては10回に1回程度で1回発生するとブラウザの再起動をしない限り二度とロードができなくなります。 原因は何がいけないのでしょうか?

  • jqueryでのフォント変更について

    今jqueryを勉強していまして、 今回サイトでよくある大中小ボタンを押すとサイト全体のフォントが変更されるように なっているものを制作しようと思っています。 実際実装はできるのですが、キャッシュに入れ次アクセスしても同じフォントサイズ(フォントの大を押してみていた人が、またアクセスした際に同じ)のままでいてほしいんですね。 いろいろと調べましてやったのですがなかなかうまくいかず、 ご教示して頂ければ幸いです。 jquery.jsと、 jquery.cookie.jsは入れています。 jqueryとcssを掲載します。 自分の考えとしましては、boxという箱にclassname(bodyに大きさによって振り分けるためのクラス)と、保持する期間、あとサイトのパスを入れればいいのではないかと思ってるのですが。。。 fontswictherはリストをくくっている親のul要素のID名です。 あとちなみにですが、下記のjsをスマートにまとめられる書き方はございますでしょうか。 そちらも一緒に教えて頂ければ幸いです。 $("#fontswitcher li").attr({href:$.cookie('box')}); var classname = "font-s , font-m , font-l"; $("#fontswitcher li:eq(0)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-s'); $.cookie('box',classname,{expires:10,path:'/'}); }); $("#fontswitcher li:eq(1)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-m'); $.cookie('box',classname,{expires:10,path:'/'}); }) $("#fontswitcher li:eq(2)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-l'); $.cookie('box',classname,{expires:10,path:'/'}); }) body.font-s{ font-size:10px; } body.font-m{ font-size:12px; } body.font-l{ font-size:14px; } お忙しい中恐縮ではございますが、 おわかりになる方、ご教示いただければ幸いです。 どうぞ宜しくお願い致します。

  • (jQuery)どこがエラーなのか分からない

    ●質問の主旨 下記のコードはどこが間違いでしょうか? Javascriptコンソールでも特にエラー表示がされません。 ご存知のかたご教示願います ●コードの意図 1.ボタン要素(button)をクリック 2.非表示(none)にされていたdiv要素(赤い正方形)が出現する ●コード (click.html) <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>JavaScriptの勉強</title> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> </head> <body> <h1>JavaScriptの勉強</h1> <script> $(function() { $("button").click(function() { $("target").show('slow'); }); }); </script> <p><button id='button'>クリック</button></p> <div id="target" style="display"; none; width: 150px; height:150px; background-color: red;></div> </body> </html>

専門家に質問してみよう