1

次のような動的に形成された HTML があります。

<span>
  10/10/2012
  <div class="calendar">
     lots of text elements here
  </div>
</span>

10/10/2012テキストのみを取得するには?

やってみspan.outerTextたのですが、IEとChromeでは動きますが、Firefoxでは動きません。

4

4 に答える 4

0

これは最善の方法ではありませんが、おそらく innerHTLM を使用してから、コンテンツを解析します..

var tmpText = span.innerHTML;
var text = tmpText.subString(0,tmpText.indexOf('<'));

美しくはありませんが、うまくいくはずです。少なくともこの場合..他の子ノードにネストされたテキストがさらにある場合は、もう少し解析を行う必要があります。

于 2013-01-29T12:44:45.747 に答える
0

jQuery の場合:

var s = $('span').clone();
s.children().remove();
var text = s.text();

jQuery を使用しない場合:

var text = '';
for (var i=0; i<spanElement.childNodes.length; i++) {
   var n =  spanElement.childNodes[i];
   if (n.nodeType==3) text += n.textContent;
}

デモンストレーション

あなたの質問のコードは単なるサンプルだったと思いますが、念のため、div はスパンで許可されていないことに注意してください (スパン許可されたコンテンツを参照してください)。

于 2013-01-29T12:42:57.603 に答える
0

これは設計上の問題です。<span>その最初の行を、簡単に選択して操作できる別の非ブロック要素にラップすることの何が問題になっていますか?

このような:

<span>
  <span class="date">10/10/2012</span>
  <div class="calendar">
  ....
</span>

あなたのテキストは次のようになります。

$('.date').text();
于 2013-01-29T12:43:08.263 に答える
0

jQueryを使用する場合:

var text = $("span").clone().children().remove().end().text();

別の方法:

var text = $("span").contents().filter(function() {
    return this.nodeType === 3;
}).text();
于 2013-01-29T12:43:35.237 に答える