0

原始问题

目标

使用 jQuery,获取.intro-portfolio类中的每个元素。如果元素不是第一个元素,则将其替换为""(nothing, blank, null bytes)。

我做了什么

环顾四周,我发现了这些 问题,并尝试将它们应用于我的情况。简化代码如下:

<!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等。


更新

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

更新 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>

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

查看开发站点以获取实际的完整代码。

4

6 回答 6

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

DEMO

于 2012-07-09T07:10:34.050 回答
2

这里没有其他答案中没有的内容,但这是您尝试做的最简单的形式:

$('.intro-portfolio:not(:first)').remove()
于 2012-07-09T07:36:10.427 回答
2

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

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

看来你想要:

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

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

参考.slice.remove

演示

于 2012-07-09T07:01:42.107 回答
2

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

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

jQuery('.intro-portfolio').slice(1).remove();
于 2012-07-09T07:04:00.473 回答
1

尝试这个:

$(".intro-portfolio:not(:first-child)").html("");
于 2012-07-09T07:00:01.770 回答
1
$(document).ready(function(e){
  $('.intro-portfolio:not(:first-child)').remove();
});

这也许?

于 2012-07-09T07:03:42.047 回答