[解決済み] 大文字小文字を区別しないXPath contains()は可能か?
2022-12-02 04:51:47
質問
DOMのすべてのtextnodeについて、nodeValueが特定の文字列を含んでいるかどうかをチェックしています。
/html/body//text()[contains(.,'test')]
これは大文字と小文字を区別する。しかし、私はまた
Test
,
TEST
または
TesT
. XPath (in JavaScript)で可能ですか?
どのように解決するのですか?
これはXPath 1.0用です。あなたの環境が XPath 2.0 をサポートしている場合は、以下を参照してください。 を参照してください。 .
そうですね。可能ですが、美しくありません。
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
これは、アルファベットがあらかじめわかっている検索文字列の場合に有効です。予想されるアクセント記号付きの文字を追加してください。
もし可能であれば、興味のあるテキストを他の方法でマークしてください。
<span>
で囲むなど、他の方法でマークします。そのようなものは、要素テキストの中の部分文字列よりもXPathで見つけるのがずっと簡単です。
それが難しい場合は、JavaScript (または XPath を実行するために使用している他のホスト言語) に動的な XPath 式の構築を手伝ってもらうことができます。
function xpathPrepare(xpath, searchString) {
return xpath.replace("$u", searchString.toUpperCase())
.replace("$l", searchString.toLowerCase())
.replace("$s", searchString.toLowerCase());
}
xp = xpathPrepare("//text()[contains(translate(., '$u', '$l'), '$s')]", "Test");
// -> "//text()[contains(translate(., 'TEST', 'test'), 'test')]"
(ハットヒント KirillPolishchuk さんの回答 - もちろん、あなたが実際に翻訳する必要があるのは、その文字だけです。 検索 を検索します)。
このアプローチは、アルファベットの予備知識を必要とせず、どんな検索文字列に対しても機能するでしょう。
上記の両方の方法は、検索文字列がシングルクォートを含むことができる場合に失敗します。 より複雑になります。 .
関連
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] 大文字・小文字を区別しない文字列比較を行うには?
-
[解決済み] JavaScript で DOM ノードのすべての子要素を削除する
-
[解決済み] HTMLのテキスト入力でクリックするとすべてのテキストが選択される
-
[解決済み] 大文字・小文字を区別せず含む
-
[解決済み] XPath contains(text(),'some string') は、複数の Text サブノードを持つノードで使用すると動作しません。
-
[解決済み] 兄弟ノードを選択する方法はありますか?
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] ExtJS 4のイベントハンドリングについて
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] JSXとLoadshを使用して、ある要素をn回繰り返す方法
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] Javascript 空の配列の削減
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?