在哪里放置带有变量的all()选择器

时间:2013-04-21 09:34:00

标签: jquery variables

我有一个这样的清单:

<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() + ')' + '*');

Example at JsFiddle

3 个答案:

答案 0 :(得分:1)

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

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

它过滤掉qw

后代的所有元素

答案 1 :(得分:1)

这应该有效:

<强> 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

答案 2 :(得分:0)

这应该可以解决问题

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

参考文献:

请注意,您也可以这样做:

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

参考:

<强>更新

根据您的评论,您也可以这样做:

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

http://gurustop.net