作为对于那些遇到这个问题的人的未来提醒,这些答案是针对搜索特定
value
作为
属性,即在HTML中硬编码的值而言——完全符合所问的问题。然而,如果用户在任何时候更改字段的值,则值
属性不会被更新,只有元素的值
属性会被更新。这将导致选择实际上具有不同当前值的元素的意外行为……因此——或者至少在我找到更好的方法之前——我一直在使用以下方法:
jQuery.extend(
jQuery.expr[':'],
{
'field-value': function (el, indx, args) {
var a, v = $(el).val();
if ( (a = args[3]) ) {
switch ( a.charAt(0) ) {
case '^':
return v.substring(0,a.length-1) == a.substring(1,a.length);
break;
case '$':
return v.substr(v.length-a.length-1,v.length) ==
a.substring(1,a.length);
break;
case '*': return v.indexOf(a.substring(1,a.length)) != -1; break;
case '=': return v == a.substring(1,a.length); break;
case '!': return v != a.substring(1,a.length); break;
default: return v == a; break;
}
}
else {
return !!v;
}
}
}
);
上述代码创建了一个新的jQuery伪选择器,可以像这样使用:
$('input:field-value(^test)');
这将选择所有以值“test”开头的输入,或者:
$('input:field-value(*test)');
这将选择所有包含“test”在其值中的输入。
还支持
!
不是,
$
以...结束或
=
等于...
input
,然后仅选择这些元素的父级是div
元素,并将它们的背景设置为红色。具有不同值的input
元素将被忽略,而其父级不是div
元素的值为“hello”的input
元素也不会得到更新(虽然可以用另一种方式)。不过,这并不是最高效的方法。 - T.J. Crowder$(“div> input [value ='hello']”)
。这将淘汰不是div
元素的直接子级别输入,BoltClock 的.parent(“div”)
将在无法优化的层面上执行此操作。 - T.J. Crowder