3

IE8以下を除くすべてのブラウザで正常に動作するように見える次のコードがあります。

$("table.availability").each( function() {
    var siteName = $(this).parent().siblings("h2").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text()
    alert(sitename);
});

要素のコンテンツを取得し、子要素に含まれるすべてのものを取り除き、その要素のテキストを残します。

私が得るエラーはそれNodeが未定義であると言っています-それで私はそれをjsファイルの先頭で宣言し、それから同じメッセージを受け取るTEXT_NODEのでそれを宣言します。次に、次のエラーが発生します。

Unable to get property 'TEXT_NODE' of undefined or null reference

誰かが私がこれを修正するのを手伝ってくれるか、誰かが同じ結果を得るためのより良い方法を考えることができますか?ありがとう。

4

3 に答える 3

8

TEXT_NODE定数の値は 3です。あなたはそれを使うことができます:

return this.nodeType === 3;

古いバージョンの IE はNodeインターフェースを実装していませんが、それでも DOM 仕様に従っており、正しいnodeTypeプロパティ値を割り当てています。

Node「定数」を使用する場合は、自分でオブジェクトを宣言できます。

var Node = Node || {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3
    // etc... if you might need other node types
};
于 2012-11-14T11:27:02.620 に答える
0

あなたの構造は次のようなものだと思います:

<h2>
    text to filter
    <span>other text</span>
</h2>

そして、h2内の「他のテキスト」を除外しようとしていますか? もしそうなら、必要なテキストの周りに別のタグラッパーを追加しないでください。

<h2>
    <span class="text-to-filter">text to filter</span>
    <span>other text</span>
</h2>

そしてそれをします:

$(this).parent().siblings("h2").find('.text-to-filter').text()
于 2012-11-14T11:37:34.890 に答える