jQueryのcontents
社内のSkypeで、こんなお題があがってきて、へーと思ったのでメモ。
下記DOMから、DOM的操作で「piyo」という文字列を抽出しなさい。
<div id='hoge'>hoge<span>foo</span><span>bar</span>piyo</div>
正規表現とか使わずに、jQueryのDOM操作でどうやるかってーとこうなるらしい。
$("#hoge").contents().last().text(); //=> piyo
contensはテキストノードも含めた、ノード一覧を返してくれるので、「hoge」テキストノード, spanタグノード、「piyo」テキストノードを返してくれるらしい。なるほど。
ae42++
DOMの中身ではなく、DOM自体を入れ替える
これは、なんどかやってすぐ忘れるから単なるメモ。例えば、こんな感じのdivがあるとする。
<div id='hoge'> bucho is love </div>
この中身の「bucho is love」だけを書き換えたい場合には、「$('#hoge').html()」で書き換えればいいけど、「id='hoge'」のdivタグを含めて、まるっと入れ替えたい時がある。としよう。
そんな場合はこうすればいける。もっとスマートな書き方はあるだろうけど、単純に、そのdivタグの前か後ろに、書き換え用のdivを挿入して、もとあったdivを消してやればいい。
#追記 これ駄目な。↓ 追記のreplaceWithでいい。 $('#hoge').after("<div id='hoge'>love is bucho</div>"); $('#hoge).last().remove(); //first()でも一緒、afterで追加した要素は、一連のJSプロセス?終了するまで、反映されないっぽい。
そんなある日のJS話ですた。
追記
monjudoh 先生 がコメントで教えてくれたけど、「replaceWith」でいいそうな。ブログに書いてよかた。過去に書いたヤツ、直しておいてください(誰か
$('#hoge').replaceWith("<div id='hoge'>love is bucho</div>");