[解決済み] jQueryでテキストノードを選択するにはどうすればよいですか?
2022-03-24 05:48:48
質問
ある要素のすべての子孫テキストノードを、jQueryコレクションとして取得したい。どのような方法がありますか?
解決方法は?
jQueryには、このための便利な関数がありません。そのため
contents()
これは、子ノードだけを与え、テキストノードを含むものです。
find()
は、すべての子孫要素を与えるが、テキストノードを与えない。以下は、私が思いついたものです。
var getTextNodesIn = function(el) {
return $(el).find(":not(iframe)").addBack().contents().filter(function() {
return this.nodeType == 3;
});
};
getTextNodesIn(el);
注意:jQuery 1.7以前を使用している場合、上記のコードは動作しません。これを修正するには
addBack()
で
andSelf()
.
andSelf()
は非推奨で、代わりに
addBack()
1.8以降では
これは純粋なDOMメソッドと比較するとやや非効率的であり、そのために
jQueryのオーバーロードのための醜い回避策。
contents()
機能
(コメントで指摘してくれた@rabidsnailに感謝) そこで、単純な再帰関数を使ったjQuery以外の解決策を紹介します。これは
includeWhitespaceNodes
パラメータは、空白のテキストノードを出力に含めるかどうかを制御します(jQueryでは自動的にフィルタリングされます)。
更新しました。includeWhitespaceNodesがfalyの時のバグを修正。
function getTextNodesIn(node, includeWhitespaceNodes) {
var textNodes = [], nonWhitespaceMatcher = /\S/;
function getTextNodes(node) {
if (node.nodeType == 3) {
if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue)) {
textNodes.push(node);
}
} else {
for (var i = 0, len = node.childNodes.length; i < len; ++i) {
getTextNodes(node.childNodes[i]);
}
}
}
getTextNodes(node);
return textNodes;
}
getTextNodesIn(el);
関連
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでテーブルの行を追加する
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】WebpackとBabelで「このファイルタイプを扱うには適切なローダーが必要な場合があります。
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】JavaScriptで関数が存在するかどうかを確認する方法は?