2011-10-24 16 views
0

私は、次のHTMLを持っては、Get次および前のnodeType

alert(window.jQuery('#t1').prev().nodeType); // undefined - tried get(0) as well 

alert(window.jQuery('#t1').get(0).nodeType); // 1 

alert(window.jQuery('#t1').next().nodeType); // undefined 

なぜそれが私がのノードタイプを取得しようとしたとき、私は未定義得るということです前と次のテキスト要素?

bタグをスパンの前に置いた場合、prev().get(0).nodeType1を返します。テキストノードとコメントは検出できませんか?

答えて

3

問題はprevnextはDOM要素ではなくjQueryオブジェクトを返します。あなたは再びgetを使用する必要があります:あなたが代わりに指定されたインデックスに基礎となるDOM要素を取得するために、配列の構文を使用することができることを

alert(window.jQuery('#t1').next().get(0).nodeType); 

注:

alert(window.jQuery('#t1').next()[0].nodeType); 

編集

だけ再あなたの質問を読んで、あなたがすでにそれを試したのを見た。 prevnextがテキストノードまたはコメントノードを取得しないと思うのは間違いありません。彼らは要素を取得します。

#t1より前のテキストノードは要素ではないため、prevは何も返しません(#t1の前後に兄弟要素がありません)。

あなたはこれを行うことができます:

alert(window.jQuery('#t1').get(0).previousSibling.nodeType); //3 
alert(window.jQuery('#t1').get(0).nextSibling.nodeType); //3 

しかし、私はそれらのブラウザの互換性の全くわかりません。

+0

奇妙なことは、 'get(0)'ポイントでfirebugによって報告された未定義です。また、問題のアップデートも参照してください。 – Abs

+0

ええ、私はちょうどあなたの質問を再読した。私の編集を参照してください。 –

+0

私は、jQueryを使ってすべてのスパンをループするときにループ内でthis.nextSiblingを実行すると、もっと奇妙なことがわかります。私はnodeTypeを得ることができます!どうしたの?多分、私がしようとしていることを達成する別の方法がありますか? – Abs

0

あなただけのプレーンなJSを使用することができます。もちろん

alert(document.getElementById('t1').previousSibling.nodeType); 
alert(document.getElementById('t1').nextSibling.nodeType); 

あなたはgetElementByIdをの要素を返し、次/ previousSiblingは、そのnodeTypeプロパティを取得しようとする前に存在していることをことを確認する必要があります。

関連する問題