0

我有一个.aa_ant包含 value的类名的输入1

现在,当我加载页面时,我正在执行此操作(案例 1):

alert($('.aa_ant[value*=1]').length )

1按预期输出。

现在,我将其更改为(CASE 2):

alert($('.aa_ant[value*="1"]').length )

它停止工作。此外,如果我将其更改1a它也会停止工作(案例 1 和 2)。

我做错了什么?

更新: .aa_ant 是淘汰赛控制:

<input class='aa_ant' data-bind='value: aa_ant, readOnly: is_readonly' />

那会是个问题吗?

更新:使用长度属性,我想查看是否有任何输入元素包含该值(我不希望任何元素具有该值)。另外,我知道我可以获取所有 .aa_ant 元素并通过它们进行枚举,以查看是否有人包含该值,但我想做 jquery-ish。

更新: 这是供参考的实际解决方案:

if($('.aa_ant').filter(function(index) {
    if(this.value.indexOf("1") >=0) {
        返回真;
    }
    返回假;
}).长度>0 ) {
    警报(“错误”);
}

谢谢您的帮助 !

4

2 回答 2

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 遍历过滤,并使用.val()来检查它值以获得正确的元素。选择器应该只用于基于静态属性(即通常不会改变值的属性)的查询,而不是像元素这样value的动态属性。input

.filter()一个使用and的简单示例.val()

$('.aa_ant').filter(function() { return $(this).val().indexOf('1') >= 0; });
于 2013-01-24T08:12:53.233 回答
0

你想用 .length 属性实现什么?.length 将返回页面上匹配选择器的数量。

如果您尝试查找输入值的长度,则需要执行以下操作:

alert($('.aa_ant[value*="1"]').val().length)

这是您的示例:http: //jsfiddle.net/ptzVy/

这是一个如何获取输入长度的示例:

http://jsfiddle.net/J52Yr/

于 2013-01-24T08:10:58.453 回答