Проблема с выбором класса с помощью jquery
-
22-08-2019 - |
Вопрос
Я уже некоторое время бился головой о стену, пытаясь заставить это работать.Я пытаюсь сократить тело комментария до одной строки для компактного предварительного просмотра комментария.Я использую функцию jquery .each для просмотра каждого .cbody (тела комментария) в моей системе многопоточных комментариев и размещения его в элементе div cshort внутри chead.Это должно работать, но я не могу выбрать класс cshort в верхней строке.Любая помощь очень ценится.Насколько я понимаю, мой jquery должен быть таким:
$('.cbody').each(function(Ind1){
var str = $(this).text();
$(this).parent().siblings('.chead').next('.cshort').html(str);
});
});
Это HTML-код комментария:
<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>
Решение
родительский элемент cbody, похоже, не имеет братьев и сестер, поэтому бит
$(this).parent().siblings('.chead')
ничего не возвращает, вы, скорее всего, тоже захотите
$(this).parent().find('.chead')
или
$(this).siblings('.chead')
чтобы получить прямой доступ к cshort, используйте
$(this).parent().find('.cshort')
Редактировать:
Иерархия вашего HTML выглядит следующим образом:
ul
| li
| | div#23
| | | a
| | | div.chead
| | | div.cbody
| | | ...
$(this)
относится к телу$(this).parent()
относится к div#23$(this).parent().siblings()
возвращает все остальные дочерние узлыli
(пусто в случае вашего примера кода)$(this).siblings()
относится к div.chead и несколькимa
элементы
поскольку chead является родственником cbody, лучший способ выбрать его — с помощью
$(this).siblings('.chead')
Другие советы
Попробуйте изменить это:
$(this).parent().siblings('.chead').next('.cshort').html(str);
к этому:
$(this).siblings('.chead').children('.cshort').html(str);
.chead
и .cbody
мы братья и сестры, поэтому вам не нужно смотреть на .cbody
родитель.Также, .cshort
является ребенком .chead
, так что вы просматриваете .chead
детей, а не его братьев и сестер (через .next
).
Разве этот последний метод не должен быть добавлен?
.html(str) будет заменять его каждый раз, и в итоге вы получите только последний.