我正在尝试在.post
.index
附加第一段
<div class="index">
<div class="post">
<p>append me!</p>
<p>paragraph</p>
<p>paragraph</p>
</div>
<div class="post">
<p>append me!</p>
<p>paragraph</p>
<p>paragraph</p>
</div>
<div class="post">
<p>append me!</p>
<p>paragraph</p>
<p>paragraph</p>
</div>
</div>
<div class="single">
<p>paragraph</p>
<p>paragraph</p>
<p>paragraph</p>
</div>
我尝试了以下两种方法:
$('.index .post p:first').append('...');
$('.index .post p:first').each(function () {
$(this).append('...');
});
但他们似乎只得到文档中的第一段,而不是每个 post
的第一段
有人知道解决方案,并解释为什么这不起作用?
答案 0 :(得分:5)
找到匹配.index .post
的所有元素,并为每个元素找到第一个段落并附加到它:
$('.index .post').each( function(){
$( 'p:first', this ).append( '...' );
} );
具有单个选择器的版本是:
$('.index .post p:first-child').append('...');
:first
伪类仅匹配单个元素(DOM层次结构中的第一个元素)。:first-child
找到每个父母的第一场比赛。答案 1 :(得分:5)
您需要使用:first-child
代替:first
$('.index .post p:first-child').each(function () {
$(this).append('...');
});
:first只匹配一个元素,:first-child选择器可以匹配多个:每个父元素一个。
答案 2 :(得分:1)
我会尝试类似的事情:
$('.index .post').each(function(){
$(this).find('p:first').append('my text to append');
});
答案 3 :(得分:0)
我的答案是@Sachin提供的答案的变体。
您应该使用:first-of-type
伪类。这样,即使.post
的第一个孩子是<div>
,它仍然会选择第一个<p>
元素。
$('.index .post p:first-of-type').each(function () {
$(this).append('...');
});
这是一个有效的演示:http://jsfiddle.net/KTj42/1/
在CSS Tricks上阅读有关:first-of-type
的更多信息。
答案 4 :(得分:0)
如果您尝试在控制台中通过jquery进行选择,您将看到在返回的数组上只有第一个段落,因为您正在过滤它。 你可以这样做,我认为它更具可读性。你在每个.post上做了一个。对于每一个。你会找到它上面的第一段并附加'...'
$('.index .post').each(function(){
$(this).find('p:first').append('...');
})