我有一个类名为.aa_ant
的输入,其中包含值1
。
现在,当我正在加载页面时,我正在执行此操作(案例1):
alert($('.aa_ant[value*=1]').length )
按预期输出1
。
现在,我将其更改为(案例2):
alert($('.aa_ant[value*="1"]').length )
它停止工作。此外,如果我将1
更改为a
,它也会停止工作(案例1和案例2)。
我做错了什么?
更新: .aa_ant是一个淘汰控件:
<input class='aa_ant' data-bind='value: aa_ant, readOnly: is_readonly' />
这可能是个问题吗?
更新:使用length属性我想看看是否有任何包含该值的输入元素(我不希望任何元素具有该值)。另外,我知道我可以获取所有.aa_ant元素并枚举它们以查看是否有人包含该值,但我想这样做jquery-ish。
更新的 以下是实际的参考解决方案:
if($('.aa_ant').filter(function(index) { if(this.value.indexOf("1") >=0) { return true ; } return false ; }).length>0 ) { alert("Error"); }
感谢您的帮助!
答案 0 :(得分:4)
您的控件似乎没有value
属性。如果未在标记中设置,则CSS属性选择器将无法读取元素的属性,这就是它失败的原因。
这是jQuery实际上并不完全符合所宣传的CSS规范的情况。 [value*=1]
无论如何工作的唯一原因是因为它不是一个有效的CSS选择器,所以在现代浏览器中它会跳过浏览器的原生Selectors API,而是使用jQuery的选择器引擎,它支持不带引号的数字和可以基于value
属性返回,即使value
属性没有出现在标记中,因此您可以获得预期的结果。其他选择器[value*="1"]
,[value*=a]
和[value*="a"]
都是有效的CSS,但与控件不匹配,因为它在标记中没有value
属性,所以你没有结果。
如果你需要通过实际值查询输入控件,看看你是否可以通过其他东西来识别它(Knockout.js是否给它一个ID?),否则你必须做一些DOM traversal或{ {3}},并使用filtering检查其值以获取正确的元素。选择器应仅用于基于静态属性(即通常不会更改值的属性)进行查询,而不是用于value
元素的input
等动态属性。
使用.filter()
和.val()
的简短示例:
$('.aa_ant').filter(function() { return $(this).val().indexOf('1') >= 0; });
答案 1 :(得分:0)
你想用.length属性做什么? .length将返回页面上匹配选择器的数量。
如果您要查找输入值的长度,则需要执行以下操作:
alert($('.aa_ant[value*="1"]').val().length)
以下是您的工作示例:http://jsfiddle.net/ptzVy/
以下是如何获取输入长度的示例: