2010-02-09 97 views
2

另一个元素我有一个网页,基本上是这样的:文本换行和元素使用jQuery

<div id="foo"> 
    <a>One</a>, <a>Two</a>, <a>Three</a>, <a>Four</a> 
</div> 

为简洁起见移除了额外的属性。

div内可能有任何数量的链接。我想要做的就是隐藏所有链接,然后添加一个“显示其余”链接。基本上,为实现这一目标(据我可以看到)发生,我需要能够改造它看起来像这样:

<div id="foo"> 
    <a>One</a>, <a>Two</a>, <a>More...</a> 
    <span style="display: none"><a>Three</a>, <a>Four</a></span> 
</div> 

你将如何包装在另一个元素的链接?

请注意,显而易见的方法($('#foo a:gt(1)').wrapAll('<span>'))在此处不起作用,因为每个链接之间都有文本节点(逗号),并且这些文本节点不会被该查询选中。

回答

3

试试这个的基础上,因为每一个文本节点算作一个现在的福祉2n调整指数:

$(function() { 
    var n = 4; 
    $('#foo').contents() 
    .filter(function(index){ 
     return index > n && ((this.nodeType==3)||(this.nodeName=="A"))}) 
    .wrapAll('<span style="background: red;">'); 
}); 
+0

为什么这种做法? nickf只是想在索引后隐藏所有'a'元素。 – user113716 2010-02-09 02:08:09

+0

@patrick:没错,包括'''文本节点。 – 2010-02-09 02:12:48

+0

@patrick - 再次看看标记......隐藏所有''元素会留下很多逗号:) – 2010-02-09 02:13:08