2

我的一些 HTML 输入的名称包含多个方括号。

例如

<input name="skus[0].skuattributeoptions[1].sao_option_id" value="559" />

我已经读过,只要将值括在引号中,您就可以使用方括号的属性值。这很好,但是,当我在包含具有上述名称的元素的 jquery 对象上使用 .filter() 时,不会返回任何元素。

下面是 Chrome 控制台输出的屏幕截图,说明了我的意思。

inputs = $('[name="skus[0].skuattributeoptions[1].sao_option_id"]') 按预期返回三个元素。

但是当我inputs.filter('[name="skus[0].skuattributeoptions[1].sao_option_id"]')在同一堆元素上使用时,我什么也没得到。

请注意,当传递给 .filter() 的选择器只有一组方括号时,例如inputs.filter('[name*="skuattributeoptions[1].sao_option_id"]')过滤器返回我所期望的!

我正在使用 jQuery 1.5.1。难道我做错了什么?

http://www.photogifts.c​​o.uk/content/images/affiliate/example/jquery-filter-issue.png

4

2 回答 2

1

没错,我刚刚使用 jQuery 1.5.1 尝试过,它返回了一个空集[],我建议更新 jQuery,如果你必须使用它,你可以改为读取name属性:

inputs.filter(function() {
   return this.name === "skus[0].skuattributeoptions[1].sao_option_id";
});

http://jsfiddle.net/zVUNm/

编辑:如果您转义[,].字符而不是使用引号,它也可以工作,似乎 jQuery 1.5.1 的.filter()方法中有一个错误:

inputs.filter('[name=skus\\[0\\]\\.skuattributeoptions\\[1\\]\\.sao_option_id]'); 

http://jsfiddle.net/tE4et/

嗯,那个版本是旧版本,2011年2月发布的,新版本不存在这个问题。

于 2013-06-06T13:36:31.960 回答
0

jQuery 1.5.1 非常过时 虽然最后添加的功能.filter()是在 jQuery 1.4 中(在 1.0 中按选择器过滤),但此后已经修复。您的问题似乎在 jQuery 1.5.1 和 IE 之间。您应该改用 jQuery 1.10.1。

于 2013-06-06T13:35:50.390 回答