1

我有一个这样的列表:

<ul>
  <li id="foo">foo</li>
  <li id="bar">bar</li>
  <li id="baz">baz
      <div>more Text</div>
  </li>
</ul>

我想从除最后一个列表之外的所有内容中删除文本,该列表为零索引为2. 因为零索引是一个变量,所以我把这个变量放在一个像这样的范围内:

<span>2</span>

Jquery中的变量:

var qw = $('li:eq(' + $("span").text() + ')');

最后是删除功能:

$('body *').not(qw).contents().filter(function() {
  return this.nodeType == 3;
}).remove(); 

问题是列表中的 div 也被删除了,但我真的很想保留它。我玩过('*')选择器,但似乎无法将其放在正确的位置。例如这不起作用:

var qw = $('li:eq(' + $("span").text() + ')' + '*');

JsFiddle 的示例

4

3 回答 3

1

鉴于您qw已经选择(缓存)并且想要使用此缓存元素删除文本节点,请尝试此操作

$('body *').not(qw).not($('*', qw)).contents().filter(function () {
    return this.nodeType == 3;
}).remove();

它过滤掉任何属于qw

于 2013-04-21T09:38:32.873 回答
1

This should work:

HTML

<span id="indexToKeep">2</span>

<ul>
    <li id="foo">foo</li>
    <li id="bar">bar</li>
    <li id="baz">baz
        <div>more Text</div>
    </li>
</ul>

JavaScript

$("li:not(:eq(" + $("#indexToKeep").text() + "))", "ul").remove();

JSFiddle.

于 2013-04-21T09:51:36.007 回答
0

这应该可以解决问题

var allButLast = $("li").not(":last");

参考:

Note you could also do:

var allButLast = $("li:not(:last)");

Reference:

Update:

As per your comment, you can also do:

var qw = $('li:not(:eq(' + $("span").text() + '))');

http://gurustop.net

于 2013-04-21T09:46:02.640 回答