一个奇怪的包含(*)jQuery选择器

时间:2012-08-22 12:31:35

标签: jquery

你好,我有这个html结构。

<span class="radio" style="background-position: 0px 0px; "></span>

我只想检查样式更改为

时的状态
<span class="radio" style="background-position: 0px -50px; "></span>

所以我猜这段代码会匹配:

var isChecked = $('.yleis span.radio[style*="-50"]')?true:false;

console.log(isChecked);

但为什么总是这样呢?

3 个答案:

答案 0 :(得分:6)

jQuery调用总是返回一个jQuery对象,即使选择器匹配零元素。

检查jQuery对象的长度,看它是否匹配任何东西:

var isChecked = $('.yleis span.radio[style*="-50"]').length > 0;

(正如Plutor所说,冒号不应该在选择器中。)

答案 1 :(得分:2)

您假设一个空的jQuery对象(没有匹配的元素)会产生false和一个非空的true。这不是真的 - 一个jQuery对象总是“东西”。你想检查它是否为空。改为使用$(...).length > 0(这会给你一个布尔值 - 不需要三元运算符)。

答案 2 :(得分:2)

jQuery选择器($('div)等)的结果将始终是一个jQuery对象。要将此转换为是否存在任何结果的布尔值,请检查length属性。除0以外的任何东西都是真的。

var isChecked = $('.yleis span.radio[style*="-50"]').length ? true : false;

你也不需要:收音机后。

http://jsfiddle.net/sfkkh/