JavaScipt(またはjQuery)や正規表現を使って、電話番号を囲んでいるタグだけにクラスをつけたいです。
今考えているのは、
正規表現で電話番号を検索し、その電話番号を囲んでいるタグ(要素)をどうにかして取得して、クラスを追加する方法です。
添付画像でいうと、
黄色部分をまず検索し、何らかの方法で赤線まで取得して、クラスを追加するイメージです。
しかし、その方法がわかりません。
わかる方いたら教えていただけきたいです。
よろしくお願いいたします。
【追記】
質問の仕方で混乱させてしまい申し訳ありません。
添付画像は一例です。
ページ内のどこにどんな構造で電話番号があるかわからないケースを想定しています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
jQueryを使ってよいなら、:contains() はどうでしょうか。
:contains() Selector | jQuery API Documentation
js
1$( "p:contains('000-1166-0000')" ).addClass('Klass')
質問を勘違いしていたので追記
NodeIterator がいいかもしれないですね。
NodeIterator - Web APIs | MDN
js
1const nodeIterator = document.createNodeIterator( 2 document.body, 3 NodeFilter.SHOW_TEXT, 4 { 5 acceptNode: function (node) { 6 return /\d{3}-\d{4}-\d{4}/.test(node.nodeValue) ? 7 NodeFilter.FILTER_ACCEPT : 8 NodeFilter.FILTER_REJECT; 9 } 10 } 11); 12 13while ((node = nodeIterator.nextNode())) { 14 node.parentNode.classList.add('Klass'); 15}
投稿2021/06/12 04:17
編集2021/06/12 05:57総合スコア36960
0
最初のwrapperクラスの場合は、以下でできそうです。
JavaScript
1var el = document.querySelector("div.wrapper div p"); 2el.classList.add("hoge"); 3console.log(el); 4//<p class="hoge">電話番号は000-1166-0000</p>
2つ目以降のwrapperクラスに操作する場合には、id="test"をつけて、これでどうでしょうか?
JavaScript
1var el2 = document.querySelector("#test div p"); 2el2.classList.add("hoge"); 3console.log(el2);
参考:MDN|Document.querySelector()
追記しました。
不確定なタグに特定の電話番号(文字列)がある場合に、タグにClassを追加する方法ついて追記しました。
JavaScript
1var bodyText = document.body.innerHTML; 2var phoneNumber = "000-1166-0000";//検索する電話番号 3var addedClass = "myClass";//付与するclass 4 5var reg = new RegExp(`<(.*)>(.*)${phoneNumber}(.*)?>`); 6bodyText = bodyText.replace(reg, `<$1 class=${addedClass}>$2${phoneNumber}$3>`); 7document.body.innerHTML = bodyText;
一個一個のタグを調べてはおらずざっくり全体から調べてClassを追加していますが、ご希望にかなっていれば幸いです。
複数の電話番号に対応しました。RegExp内の"g"で解決します。
もっとスマートな正規表現もあるかもしれないですが、とりあえずこれでご確認ください。
JavaScript
1var bodyText = document.body.innerHTML; 2var addedClass = "myClass";//付与するclass 3 4var reg = new RegExp(/<(.+)>(.*)(\d{3}-\d{4}-\d{4})(.+)?>/,"g"); 5bodyText = bodyText.replace(reg, `<$1 class=${addedClass}>$2$3$4>`); 6document.body.innerHTML = bodyText;
投稿2021/06/12 05:55
編集2021/06/12 13:47総合スコア608
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/12 08:24
2021/06/12 13:15
2021/06/12 13:49
2021/06/12 15:12 編集
2021/06/13 02:56
2021/06/13 15:26
2021/06/14 12:52
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/12 04:17
2021/06/12 04:34
2021/06/12 05:07
2021/06/12 15:06 編集
2021/06/13 14:57
2021/06/14 12:48