【问题标题】:jQuery :not() selector for class not workingjQuery :not() 类的选择器不起作用
【发布时间】:2014-08-19 02:01:02
【问题描述】:

我有以下 HTML:

<ul> 
    <li>Hello</li>      
    <li>World</li>
    <li class="not_me">Hi</li>
</ul>

我想在一个 jQuery 调用中将列表项中的所有文本作为一个数组获取:

arr = $('li:not(.not_me)').map(function(el, i) {
    return $(el).text();
});

预期结果:

arr = ['Hello', 'World']

实际结果:

arr = ['Hello', 'World', 'Hi']

为什么我的 :not() 排除不起作用?用引号 "not('.not_me')" 编写它会得到相同的结果。

这是一个显示问题的 JSFiddle:http://jsfiddle.net/cC8fT/683/

【问题讨论】:

  • 我相信你的代码确实有效,只是你测试不正确。
  • 1) 目前,el 是索引,i 是元素。 2)它工作:jsfiddle.net/wMv9e
  • 你打印的数组不是那个表达式的结果。
  • 我的 jQuery 应该如何获得想要的结果?

标签: jquery jquery-selectors


【解决方案1】:

这工作fiddle

arr = $.each($('li:not(.not_me)'), function(i, el) {
    return el;
});

选择器$('li:not(.not_me)') 为您提供数组,然后$.each() 遍历所有内容。在示例中,您可以看到带有新元素的新元素块。

您可以做很多事情,例如,如果您只想要名称,您可以这样做:

var arr = [];
$.each($('li:not(.not_me)'), function(i, el) {
   arr.push($(el).val()); // or text
});

有时你必须接受你不能也不应该在一行中做事:)。要么太复杂,要么让你的代码不可读。

编辑

刚刚发现对于$.each,迭代器函数需要有参数index,然后是element,而不是其他方式

【讨论】:

  • 谢谢,这是一个可行的解决方案 - 赞成。然而,第二个正是我真正想要的。它只是有点短:-)
  • 是的,不用担心,有几个不同的答案总是好的,因为它可以让您做出明智的决定。 :)
【解决方案2】:

:not 运算符工作正常,但代码中还有一些其他问题。

您已经交换了eli 参数,因此元素进入i 参数,索引进入el 参数。

结果不是一个数组,它是一个包含该数组的 jQuery 对象。您可以使用get 方法从对象中取出数组。

var arr = $('li:not(.not_me)').map(function(i, el) {
  return $(el).text();
}).get();

演示:http://jsfiddle.net/P8uS6/

【讨论】:

  • 其实根据docs你应该有el然后i
  • @No1_Melman:您正在查看错误方法的文档。这是正确的:api.jquery.com/map
  • 我只是看了那个文档,它说我错了。
  • 今天(2016 年 11 月 17 日)尝试了这个 jsfiddle,但它不起作用。它显示“Hello”、“World”和“Hi”。这是后来引入的 jQuery 错误吗?我在自己的项目中遇到了这个问题,因此我访问了这个页面。
猜你喜欢
  • 2016-12-19
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多