jQuery - 替换除了第一个类之外的所有内容

时间:2012-07-09 06:57:55

标签: jquery html jquery-selectors

原始问题

目标

使用jQuery,获取.intro-portfolio类的每个元素。如果元素不是第一个,请将其替换为""(无,空白,空字节)。

我做了什么

搜索周围,我找到了these questions,我试图将它们应用到我的情况中。简化的代码如下:

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
$(document).ready(function() {
$(".intro-portfolio:not(:first-child)").each(function() {
        $(this).repalceWith("");
    });
});
</script>
<body>

<p>Test this is the control</p>

<p class="filter">This is the first</p>

<p class="filter">Second</p>

<p class="filter">Third</p>

</body>
</html>

当然,这不起作用(你能告诉我我不是一个javascript / jQuery开发人员吗?我敢打赌你在那里打破了语法规则)。

你会如何实现这个?

上下文

Tumblr主题 - 与问题无关,但它解释了为什么我不知道该类将应用于哪个元素 - 它可以是img,或iframe等。< / p>


更新

非常感谢所有回答的人!显然这样一个简单的问题只有一个真实的方法,但谢谢你的回答!为所有人投票。

更新1:在尝试解决方案时,我发现虽然它从显示中移除了元素,但它们仍在加载。

这是我的实施:

<html>
<head>
 ...
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
 ...
    /* Remove HTML for all but first portfolio on home page */
    $(".intro-portfolio").slice(1).remove(); 
</script>
</head>
<body>
 ...
</body>
</html>

但是当我查看源代码时,元素仍然存在。是不是docs page上的第三个代码摘录说的是元素不应该加载或存在?

查看development site的实际完整代码。

6 个答案:

答案 0 :(得分:2)

:first-child仅选择元素当且仅当它是其父元素的第一个子元素时。

您的HTML不包含.intro-portfolio元素,但如果您将.filter元素视为它们,那么它们都不是body的第一个子元素。没有类的第一个p元素是第一个子元素。

似乎你想要:

$(".intro-portfolio").slice(1).remove();

这会将所选元素减少到除第一个之外的所有元素并将其删除。

参考.slice.remove

DEMO

答案 1 :(得分:2)

您可以使用.slice方法选择匹配结果的子集,在下面的示例中,它将选择除第一项之外的所有项目(索引为零)。

.remove方法从DOM中删除匹配的元素,并且还会整理随jQuery附加的任何事件处理程序等。

jQuery('.intro-portfolio').slice(1).remove();

答案 2 :(得分:2)

$(".intro-portfolio").not(":first").each(function() {
    $(this).bar();
});

DEMO

答案 3 :(得分:2)

这里没有其他答案真的没有,但这是你想要做的最简单的形式:

$('.intro-portfolio:not(:first)').remove()

答案 4 :(得分:1)

试试这个:

$(".intro-portfolio:not(:first-child)").html("");

答案 5 :(得分:1)

$(document).ready(function(e){
  $('.intro-portfolio:not(:first-child)').remove();
});

这可能吗?