Проблема выбора класса с помощью jquery - PullRequest
0 голосов
/ 28 марта 2009

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

Ответы [ 3 ]

4 голосов
/ 28 марта 2009

родитель cbody, кажется, не имеет братьев и сестер, поэтому бит

$(this).parent().siblings('.chead')

ничего не возвращает, вы, скорее всего, хотите либо

$(this).parent().find('.chead')

или

$(this).siblings('.chead')

, чтобы получить наиболее непосредственный доступ к cshort, используйте

$(this).parent().find('.cshort')

Edit:

Иерархия вашего 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')
1 голос
/ 28 марта 2009

Попробуйте изменить это:

$(this).parent().siblings('.chead').next('.cshort').html(str);

к этому:

$(this).siblings('.chead').children('.cshort').html(str);

.chead и .cbody являются братьями и сестрами, поэтому вам не нужно смотреть на родителя .cbody. Кроме того, .cshort является потомком .chead, поэтому вы просматриваете детей .chead, а не его братьев и сестер (через .next).

0 голосов
/ 28 марта 2009

Не следует ли добавить последний метод?

.html (str) будет заменять его каждый раз, и вы получите только последний.

...