.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');
这将根据元素的位置返回 true 或 false。
但是这将总是返回 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') 不适用于变量选择器?的主要内容,如果未能解决你的问题,请参考以下文章