Вопрос

Я уже некоторое время бился головой о стену, пытаясь заставить это работать.Я пытаюсь сократить тело комментария до одной строки для компактного предварительного просмотра комментария.Я использую функцию 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>
&nbsp;,

<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) будет заменять его каждый раз, и в итоге вы получите только последний.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top