2011-05-10 5 views
1

DOMツリーウォーキングを行っているプロジェクトで作業しています。テキストノードの "nodeValue"プロパティのタイプ== IE9の "不明"

if (newTextNode.nodeValue == "") 
{ 
    //... 
} 

この.nodeValue:私は次の呼び出ししようとすると、その後

var newTextNode = treeWalker.currentNode.splitText(charOffset); 

問題がある:文書にハイライトを追加するために、いくつかのspanタグを挿入するためには、textnodeを分割することが必要な場合があります呼び出しは、簡単に言うと、IE9でJavaScriptエラーをもたらしますIncorrect function.少なくとも言わないことはあまり役に立たない。おそらく何か変わったと思って、私はデバッガを開いて実行しました。typeof newTextNode.nodeValue"unknown"を返します。

誰でもこの動作を説明できますか?おそらくその関数が単にテキストノードには当てはまらないかもしれないと思っていましたが、他のシナリオではうまく機能します。それは恥ずかしいと思われるsplitTextを呼び出した後です。

皆様のご協力に感謝いたします。私のGoogle-fuは今のところ不十分です。

ADDITION:

newTextNodeオブジェクトを見た後、 "ファンクションが間違っています"

  • データ
  • のnodeValue
  • のTextContent
  • に評価する複数のプロパティがあります
  • wholeText
+0

関連項目[DOMテキストノードのテキストの取得方法](http://stackoverflow.com/questions/7690627/how-to-retrieve-the-text-of-a-dom-text-node ) – hippietrail

答えて

6

これは戻っている何IE 9 IE 9

のバグは明らかにテキストノードではないです。それは何か私はまだよく分からない。 textNode.splitText(n)と呼び出すと、nがテキストノードのテキストの長さに等しくなります。これは、IE 7(今8をテストすることができない)、他のすべての主要なブラウザで起こり、そしてDOM 2 specに反して、指定されたオフセットに2つのノードにそのsplitText()

ブレークこのノードを述べているありません両方とも兄弟として木に保持する。分割された後、このノードには、オフセットポイントまでのすべてのコンテンツが含まれます。オフセットポイント以降のすべてのコンテンツを含む同じタイプの新しいノードが返されます。元のノードに親ノードがあった場合、新しいノードは元のノードの次の兄弟として挿入されます。オフセットがこのノードの長さと等しい場合、新しいノードにはデータがありません。

最も簡単な解決策は、この場合のチェックを追加することです:

if (n < textNode.length) { 
    newTextNode = textNode.splitText(n); 
} 
+0

私は狂っていないことを確認してうれしいです。ここで何が起こっているのかを見て、あなたの提案を試してみましょう!私の頭の上から離れて、私はsplitText 'n'値が実際にはノード内のテキストの長さであるとは思わないが、私は検証するだろう。助けてくれてありがとう。 –

0

IE8を使用すると、その値の長さでtextnodeを分割する場合は、空のノードを返し、正常に動作します。 IE9は、データの長さを分割しようとするまで正しく動作します。

私はIE9(またはIE10)が正しくなると思っていますが、IE6は同じ問題を抱えています。つまり、その長さのインデックスでテキストノードを分割できません。

より大きいをテキストの長さに渡すと、他のブラウザも同様に失敗するため、分割する前にノードのdata.lengthを確認できます。

分割したいインデックスの長さ以下の場合は、そのままにしておき、その隣に新しい空ノードを追加します。

IE9(など)は、空の文字列で作成されたtextnodeのデータまたはnodeValueに空の文字列を返します。

関連する問題