Problème classe de sélection à l'aide jquery
-
22-08-2019 - |
Question
J'ai frappais la tête contre un mur en essayant faire ce travail pendant un certain temps maintenant. Je suis en train de raccourcir le corps de commentaire à une ligne pour un aperçu de commentaire compact. J'utilise jquery .each fonction pour passer par chaque .cbody (corps de commentaire) dans mon système de commentaire fileté et placez-le dans le CShort div à l'intérieur Chéad. Il devrait fonctionner, mais je ne peux pas choisir la classe CShort dans la ligne supérieure. Toute aide est très appréciée. Pour autant que je peux voir mon jquery devrait être ceci:
$('.cbody').each(function(Ind1){
var str = $(this).text();
$(this).parent().siblings('.chead').next('.cshort').html(str);
});
});
Ceci est le code html pour le commentaire:
<ul>
<li>
<div id="23">
<a name="23">
</a>
<div class="chead">
<a href="#" class="unord">
<img src="images/plus.gif" border="0">
</a>
<a href="userinfo.php?user=muuuuuuuu">
<img src="include/avatar/n.jpg" border="0">
</a>
<span style="display: none;" class="uname">
usersname
</span>
,
<span class="cshort">
</span>
<span class="votes_up" id="votes_up23">
2
</span>
-
<span class="votes_down" id="votes_down23">
0
</span>
<span class="vote_buttons" id="vote_buttons23">
<a href="javascript:;" class="vote_up" id="23">
</a>
<a href="javascript:;" class="vote_down" id="23">
</a>
</span>
</div>
<div class="cbody">
<br>
The comment text funny lol
</div>
<a style="display: none;" href="#" class="reply" id="23">
Reply
</a>
<a style="display: none;" href="#21" class="cparent">
Parent
</a>
</div>
</li>
</ul>
La solution
parent de l'cbody ne semble pas avoir les frères et sœurs, de sorte que le bit
$(this).parent().siblings('.chead')
est rien retour, vous voulez probablement soit
$(this).parent().find('.chead')
ou
$(this).siblings('.chead')
pour obtenir le plus directement à la CShort, utilisez
$(this).parent().find('.cshort')
Edit:
la hiérarchie de votre HTML ressemble à ceci:
ul
| li
| | div#23
| | | a
| | | div.chead
| | | div.cbody
| | | ...
-
$(this)
fait référence à la cbody -
$(this).parent()
fait référence à div # 23 -
$(this).parent().siblings()
retourne tous les autres nœuds enfants duli
(vide dans le cas de votre exemple de code) -
$(this).siblings()
fait référence à div.chead, et quelques élémentsa
depuis Chéad est un frère de cbody, la meilleure façon de le sélectionner est avec
$(this).siblings('.chead')
Autres conseils
Essayez de changer ceci:
$(this).parent().siblings('.chead').next('.cshort').html(str);
à ceci:
$(this).siblings('.chead').children('.cshort').html(str);
.chead
et .cbody
sont frères et sœurs, de sorte que vous n'avez pas besoin de regarder les parents de .cbody
. En outre, .cshort
est un enfant de .chead
, de sorte que vous regardez à travers les enfants de .chead
, et non à ses frères et sœurs (via .next
).
Si cette dernière méthode ne soit append?
.html (str) sera le remplacer à chaque fois, et vous ne finissent avec le dernier.