質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

1160閲覧

jQueryで指定タグを置換

crazyBaseball

総合スコア21

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/10/11 20:24

編集2021/10/22 22:49

【補足】お二人からご回答を頂戴しましたが、文末の「環境」において実現可能な方法を探しております。どうぞ宜しくお願い致します。

###実現したいこと

以下の条件に合致したら<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 ビット)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/10/11 23:19

そもそも、<dl>直下に<p>を書くのは適切ではありません。
crazyBaseball

2021/10/11 23:38

仰る通りかと思いますが、Chromeが出力するHTMLなので、そういった指摘はGoogleにお願いします..
maisumakun

2021/10/11 23:40

> Chromeが出力するHTMLなので、そういった指摘はGoogleにお願いします.. それをあえて行おうとしているのはなぜでしょうか?
crazyBaseball

2021/10/11 23:46

特に気にしないでください。
guest

回答3

0

一般にdlタグの直下にはscriptやtemplateなど特殊なものを除くと
dt,dd,div(特例)しか置くことができません

また仮にpに置換できるとして、aのみを直下に持つという条件は曖昧です

HTML

1<dl> 2<p></p> 3<dt><a>linkA</a></dt> 4<dt><a>linkB</a></dt> 5<dt><a>linkC</a><a>linkD</a></dt> 6<dt><a>linkE</a>text</dt> 7<dt><a>linkF</a> 8</dt>
  • C/Dのように複数のaを持つ場合
  • Eのようにテキストノードを持つ場合場合
  • Fのように改行のような空白文字をテキストノードとして持つ場合

javascript

1$(function(){ 2 $('dt').each(function(){ 3 if($('> :not(a)',this).length>0){ 4 $(this).contents().unwrap().wrapAll('p'); 5 } 6 }); 7});

※一部修正

投稿2021/10/12 01:15

編集2021/10/12 01:38
yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

crazyBaseball

2021/10/12 01:43

ありがとうございます。返答は以下【あ】【い】【う】となります。 特に【う】につきまして、お手すきの折にご確認宜しくお願い致します。 【あ】dlタグの直下の件 →本件において文法は無用です。なぜならEvernoteにコピペする際に<dl>があると自動で削除不可能なインデントが挿入され邪魔なので<p>にしたいだけだからです。 【い】3つのご懸念の件 →いずれもございません。Chromeのエクスポートの書式に従います。 【う】コードの件 →質問の環境下(ChromeでエクスポートしたHTMLファイルを、ダブルクリックでChromeで開き、F12のコンソール画面で実行)では、実現できませんでした。
yambejp

2021/10/12 01:47

一応サンプル付けてありますので適当なdlのサンプルで動作確認していただき 想定する結果と違う場合はご指摘ください
crazyBaseball

2021/10/12 01:50

サンプルありがとうございます。先のコメントの【う】の通りです。思いつく点ございましたらまた宜しくお願い致します。
guest

0

ベストアンサー

イメージ説明

投稿2021/10/12 00:16

編集2021/10/13 15:46
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

crazyBaseball

2021/10/12 00:26

ありがとうございます。.lengthはtrueじゃなく1など、細かい使い方がわかっていなかったので助かりました。 さて確かにcodepenできていますが、質問に記載した環境(ChromeでエクスポートしたHTMLファイルを、ダブルクリックでChromeで開き、F12のコンソール画面で実行)ではできませんでした。もちろんご提示のコードは $(function(){}); で囲んでいます。
退会済みユーザー

退会済みユーザー

2021/10/13 15:46 編集

.
crazyBaseball

2021/10/12 03:26

すごい!できました。本当にありがとうございました。 参考のstackoverflowによればできなかった理由はつまり、「開発ツールのコンソール画面においてはjQueryが使えないから」という原因になるのでしょうか?
crazyBaseball

2021/10/12 03:29

いやしかしjQueryが使えないのならば $(function(){ console.log('jQueryが使えています'); }); で「$がない」というエラーとなるはずですよね。
退会済みユーザー

退会済みユーザー

2021/10/13 15:47 編集

.
crazyBaseball

2021/10/12 03:37

なるほど!仰る通りでした。いつも開発ツールでjQuery使えるのにおかしいな?と首をかしげていたので、スッキリできました。最後までご返答誠にありがとうございます。
guest

0

直接的な回答ではありませんが、WebページにjQueryは入っていますでしょうか?

jQueryがない場合、コンソール専用の特殊な$が出現します(jQueryの$とは異なる動作をします)。

投稿2021/10/12 01:57

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

crazyBaseball

2021/10/12 03:37

ご指摘の通りでした。普段開発ツールでもjQueryが使えるというだけで、jQueryは入っているはずだと勘違いしておりました。尚その点は letsirK.aivlyS 様が解決して下さいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問