2

次のような HTML 構造があります。

<div class="votes">
    <b>5</b> Votes
    <a id="vote-' + element_id +'" href="#" class="vote-btn"></a>
</div>

次を使用して、5 ie 投票後にテキストを取得することができました。

var voteTextNode = $(this).parent('div').contents().filter(function() {
                    return this.nodeType == 3;  
                });
var voteText = voteTextNode.text();

今、私はこのテキストを投票に変更したいと思います。これはそれぞれの投票数です。私はこれを試しました:

voteNewText = ( newCount == '1' ) ? 'Vote' : 'Votes';
voteTextNode.text(voteNewText);

しかし、それは私にはうまくいきません。このリンクのコードも試しました: jQuery を使用してテキスト ノードを取得、操作、置換するにはどうすればよいですか? しかし、それは私にとってもうまくいきません。どこが間違っているのか教えてください

4

4 に答える 4

5

これまで見てきたように、jQuery は実際にはテキスト ノードを処理するために作られているわけではありません。var voteTextNodeテキストノードのセットを保持するjQueryインスタンスになります。を使用してそれらを操作することはほとんどできません.text()。これにより、いくつかの新しい TextNodes がそれらに追加されます。

それでも、これはうまくいくはずです:

 $(this).parent('div').contents().each(function() {
     // iterate over all child nodes
     if (this.nodeType == 3)
        this.data = "Vote";
 });

しかし、単純な dom メソッドを使用すると、より明確になる可能性があります。

 var countTextNode, voteTextNode;
 $(this).parent('div').find('b').each(function() {
      countTextNode = this.firstChild;
      voteTextNode = this.nextSibling;
 });
 return function setVotes(num) {
      countTextNode.data = num;
      votTextNode.data = num == 1 ? 'Vote' : 'Votes';
 };
于 2012-05-17T11:38:56.353 に答える
4

スパンに入れて

<div class="votes">
    <b>5</b> <span id="votesTxt">Votes</span>
    <a id="vote-' + element_id +'" href="#" class="vote-btn"></a>
</div>

その後

$("#votesTxt").text(( newCount == '1' ) ? 'Vote' : 'Votes');


spanを使用したくない場合は、bタグの後の要素のテキストを変更するだけで編集できます。

$("#votes b:first")[0].nextSibling.data = (( newCount == '1' ) ? 'Vote' : 'Votes');
于 2012-05-17T11:23:51.867 に答える
2

それを DOM ツリーとして扱います。おそらく必要なのは、<b>それぞれの内部の最初の要素<div>をクラス「投票」で取得し、その直後のテキスト ノードのテキストを変更することです。jQuery は要素の選択と反復処理に優れているため、必要に応じてこの部分に使用してください。要素を取得したら<b>、通常の DOM に切り替えます。次に例を示します。

デモ: http://jsfiddle.net/Qq3T7/

コード:

$("div.votes").find("b:first").each(function() {
    this.nextSibling.data = ($(this).text() == "1") ? " Vote" : " Votes";
});
于 2012-05-17T12:13:51.273 に答える
0

初期マークアップを変更できますか?変更したいテキストをタグでラップするだけで、これを行うのがはるかに簡単になります。

<span id="votetext">Vote</span>

そして、テキストを簡単に設定できます。

$('#votetext').text('Votes');
于 2012-05-17T11:24:09.373 に答える