有没有人知道使用jQuery一种简单的方法,可以选择所有val()属性为特定值的元素选择到一个选择器中,然后遍历它们并检查它们的每个值吗?我希望有更简单的方法。
谢谢。
谢谢。
select[value=x]
无法正常工作?首先,因为<select>
实际上没有value
属性。选择框并没有单一的值:可能没有选定的选项(通常不应该有,但至少在IE中可以),在<select multiple>
中,可以选择任意数量的选项。input[value=x]
也无法正常工作,尽管<input>
确实有一个value
属性。它确实起作用了,只是它并不会做你想要的事情。它获取的是HTML中value="..."
属性的值,而不是你输入到表单中的当前值。 value="..."
属性实际上对应于defaultValue
属性而不是value
属性。option[value=x][selected]
也无法正常工作,因为它检查的是HTML源代码中的<option selected>
属性(selected
属性-> defaultSelected
属性),而不是选项的当前选中状态(selected
属性不是属性)。选项的选中状态自加载页面以来可能已经改变。value
、selected
等表单属性。:has
。这会导致现代浏览器的本机querySelectorAll
方法失败,进而导致jQuery退回到自己的(本地JavaScript、速度较慢)选择器引擎。该选择器引擎存在一个错误,它混淆了属性和属性值,从而使[value=x]
能够像你期望的那样工作,而不会像应该有的那样失败!(更新:在更新版本的jQuery中可能已不再存在此问题。)$('select').filter(function() {
return $(this).val()==='the target value';
}).parent().addClass('warning');
HTML5中有一个value
属性,被现代浏览器支持,在读取时可以给你第一个选择的<option>
的值。jQuery的val()
在这里是安全的使用方式,因为它提供了获取第一个选项的相同方法,即使在不支持此功能的浏览器上也能正常工作。
$("select:has(option[value=blah]:selected)")
.val()
返回的是一个属性的当前值,而不是一个属性的原始值,这正是[attribute='value']
所测试的。 - Auspex你可以使用:
$("select[value=X]");
其中 X 是您想要检查选择值的值。
您可以创建一个更改事件,每当值更改时,将该值放入选择元素上的自定义属性中。然后,您可以使用简单的选择器查找所有具有该值的选择元素。例如:
$("select").on("change", function (e) {
var $select = $(e.currentTarget);
$select.attr("select-value", $select.val());
});
然后你可以这样做:
var $matches = $("select[select-value='" + searchVal + "']");
$matches将包含所有匹配的选择。
这比迭代元素要容易得多。记得在渲染页面时将select-value设置为初始值,这样您就不需要为每个选择器触发更改事件,以便设置select-value。
$("p").not(".hidden_control").find('option:selected[value=""]')
,原因和Tesserex的代码一样?另一种选择似乎不太优雅,这真是遗憾... - Danny Staple:selected
被定义为(由jQuery定义 - 它不是标准的CSS伪类)基于当前选定状态而操作,而不是属性值(如[selected]
)。 - bobince