.is(':even') 不适用于变量选择器?

Posted

技术标签:

【中文标题】.is(\':even\') 不适用于变量选择器?【英文标题】:.is(':even') does not work with a variable selector?.is(':even') 不适用于变量选择器? 【发布时间】:2013-01-19 20:18:01 【问题描述】:

我正在使用 jQuery 来检查一个元素是 odd 还是 even

 $("#map183").parent().is(':even');

这将根据元素的位置返回 truefalse

但是这将总是返回 false

   function whereAreWe(myself,range)
        var parent = myself.parent();
        var position = parent.is(':even');
        alert(position);
        //outputs false
   

   $('.hasSVG').on('click', function()
        whereAreWe($(this),2);
   );

我在这里有一个工作示例:JSFiddle

在示例中,您将看到我正在尝试查看所述元素的父级(.line)是奇数还是偶数。

【问题讨论】:

$("#map183").parent().is(':even'); 似乎总是返回 true 是的,这是意料之中的。对不起,如果它不清楚。问题出在第 5 行:`var position = parent.is(':even');` 它应该已经返回 false,因为元素没有移动。 map183 的父级没有移动 :) 父选择器有问题。 When tested witheach,它返回0 Arrg,jsfiddle 在 Ubuntu 上的 Chrome 上无法正常工作。搞砸了光标不显示,一堆重复的图标...希望人们更多地使用 JSBin。 @elclanrs ha,抱歉,那帮不了你了。 【参考方案1】:

这是因为 :even 选择器仅在列表中有用 但是 parent 只指一个对象。 因此, :即使列表为 1 也没有意义。

但是,您有指示行号的 ID

var position = parent.attr("id").substr(4) % 2 == 0;
console.log(position);

提取 id 并从 "lineX" 中删除 "line"-string 为您提供行号 X。 使用 MOD 2 进行检查(或者使用 1 进行按位与:)

var position = ((parent.attr("id").substr(4) & 1) == 1);

会成功的。

【讨论】:

这样做的好方法,我同意。那谢谢啦。但是为什么$("#map183").parent().is(':even'); 会返回其各自的真假。如果您是正确的,那么我不明白这是如何正常工作的。 我不完全确定,但我认为:even.is() 没有任何意义。在其他情况下是有意义的,例如 .is(":visible") see :even 对具有多个项目的操作有意义:$("ol li:even").remove(); 这会删除所有偶数列表项

以上是关于.is(':even') 不适用于变量选择器?的主要内容,如果未能解决你的问题,请参考以下文章

Jquery 不适用于两个 :not 选择器?

引导日期选择器不适用于 Webpack

Highcharts 重排不适用于类选择器

jquery 属性选择器不适用于数据属性

resignFirstResponder() 不适用于日期选择器

为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?