2011-06-09 23 views
3

input元素的列表,并使用一个选择,我想找到那些jQuery:是否可以在一个选择器中测试输入类型和属性?

  1. 是复选框
  2. value属性设置

我能做到这一点?

我想:

  • $(items).find("input:checkbox[value]")
  • $(items).find("input[value]:checkbox")

但都忽略了[value]只有测试。

当然,我可以使用两个选择器,但只有一个会更好。


我的必备用例是this

基本上,我想根据其他复选框是否未选中来对复选框执行一些操作。在这个例子中,“父”复选框仍然被检查,因为函数getChildrenCheckboxes中的jQuery选择器"input[value]:checkbox"与“无子”复选框以及其他复选框匹配。

回答

4

首先,如果人们花时间去提供你用答案,你至少可以在接受那些答案

第二,关于你的问题,你可以使用filter()或检查是否为空值:

$('input[value!=""]:checkbox').addClass('selected'); 

http://jsfiddle.net/niklasvh/pEK3c/

$('input:checkbox').filter(function(){ 
return this.value.length; 
}).addClass('selected'); 

例如:http://jsfiddle.net/niklasvh/duAB8/

编辑

关于这个问题,为什么不直接用$('input[value]')来检查value的存在,首先这取决于你是否想知道其是否为空,或者根本不存在,其次,也许是最重要的,你想让它在不同的浏览器上一致地工作吗?

下面的标记:

<input type="checkbox" value="2" /> 
<input type="checkbox" value="" /> 
<input type="checkbox" /> 
<input type="checkbox" value="23" title="a" /> 

用下面的选择:

$('input:[value]:checkbox').prop('checked',true); 

将为下列结果:

Chrome 11, X - - X 
FF4,  X - X X 
IE 8,  X - X X 

那么,你想知道的属性是否定义,还是其空?如果第一个,你可以期望该选择器的差异化结果。在第一个例子中,两者都给出了一致的结果X - - X

这将会是一个完全不同的故事,如果你是在寻找[title]属性...

+0

如果我正确阅读[documentation](http://api.jquery.com/has-attribute-selector/),我可以检查是否存在属性。我的测试表明相同。至于接受答案:我自己对此感觉非常糟糕,但到目前为止,我总是做了比其他任何受访者提出的更多的事情,并且我认为仅仅因为这个原因才接受答案是不对的。 – 2011-06-09 17:28:04

+0

@Legate我在这里的回答太长,无法在评论中解释,所以我更新了答案,解释了只使用[value]选择器的问题。 – Niklas 2011-06-09 17:41:23

+0

'this.value.length',请! – lonesomeday 2011-06-09 17:43:45

0

编辑:

如果您想获得复选框并具有价值属性的元素,你可以利用多种属性选择:http://api.jquery.com/multiple-attribute-selector/

$("input[type='checkbox'][value]") 
+0

该做的或,还不如OP想要的和。 – 2011-06-09 17:14:42

+0

看我的编辑。我相信这是你想要的方式。 – fehays 2011-06-09 17:27:40

+0

请参阅我的回答,解释使用'[value]' – Niklas 2011-06-09 17:44:55

相关问题