【補足】お二人からご回答を頂戴しましたが、文末の「環境」において実現可能な方法を探しております。どうぞ宜しくお願い致します。
###実現したいこと
以下の条件に合致したら<p>
へ置換したいです。
条件:<a>
のみを直下に持つ<dt>
###該当のソースコード
こちらはChromeのブックマークをエクスポートした際のHTMLになります。
このように<dt>
が出力されるのですが、このうち条件に合致したら<p>
へ置換したいです。
html
1<dt> 2 <h3>title</h3> 3 <dl> 4 <p></p> 5 <dt><a>linkA</a></dt><!-- 置換したい --> 6 <dt><a>linkB</a></dt><!-- 置換したい --> 7 </dl> 8 <p></p> 9</dt>
###目的の結果
以下が目的の結果です。
html
1<dt> 2 <h3>title</h3> 3 <dl> 4 <p></p> 5 <p><a>linkA</a></p><!-- 置換した --> 6 <p><a>linkB</a></p><!-- 置換した --> 7 </dl> 8 <p></p> 9</dt>
###試したこと(1)
まずループを用いて全てのdt
を確認する必要があると思いました。そのループ内で条件を判定し、trueなら置換という作戦を考えています。
しかし条件の判定として.children
を使いましたが思うようにできませんでした。
jQuery
1$(function(){ 2 3 $('dt').each(function(index, element){ 4 5 // 条件に合致したら 6 if ( $(this).children('a') ) { 7 $(this).replaceWuith('p'); 8 } 9 }); 10 11});
###試したこと(2)
コンソールで確認したら1回だけundefined
が表示されるだけで、なぜなのか..わかりません。
jQuery
1$(function(){ 2 3 $('dt').each(function(index, element){ 4 // コンソールで確認 5 var hasA = $(this).children('a'); 6 console.log(hasA); // -> undefined 7 8 // 条件に合致したら 9 if ( hasA ) { 10 $(this).replaceWuith('p'); 11 } 12 }); 13 14});
###試したこと(3)
シンプルにdt
のループとコンソールだけの処理にしたのですが、同じように1回だけundefined
が表示されるだけでした..
jQuery
1$(function(){ 2 $('dt').each(function(index, element){ 3 console.log( $(this) ); 4 console.log( index ); 5 console.log( element ); 6 }); 7});
###試したこと(4)
普通に取得したら一番外側のdt
がコンソールに表示されました。
jQuery
1var dts = $('dt'); 2console.log(dts);
なのに、.length
で数えてみたらundefinedでした。
jQuery
1var dtLen = $('dt').length; 2console.log(dtLen);
###環境
ChromeでエクスポートしたブックマークのHTMLファイルを、ダブルクリックでChromeで開き、F12のコンソール画面で実行しています。
Chromeバージョンは以下です。
バージョン: 94.0.4606.81(Official Build) (64 ビット)
回答3件
あなたの回答
tips
プレビュー