更新:添加了textEquals选择器代码。
我正在为我的网络应用程序中的字段使用jquery和autocomplete。
我有一个“更改”事件,可确保用户从自动填充列表中选择有效值。此事件很有效,除非所选值中有括号,li:textequals选择器不起作用。
如何使用li:textequals翻译我正在寻找的文本中的括号?
change: function (event, ui) {
//if the value of the textbox does not match a suggestion, clear its value
if ($(".ui-autocomplete li:textEquals('" + $(this).val() + "')").size() == 0) {
$(this).val('');
};
textEquals选择器代码:
$.expr[':'].textEquals = function (a, i, m) {
return $(a).text().match("^" + m[3] + "$");
};
答案 0 :(得分:3)
我没有对此进行过测试,但jQuery文档建议使用两个反斜杠:
如果您希望使用任何元字符(例如
!"#$%&'()*+,./:;<=>?@[\]^{|}~
)作为名称的文字部分,则必须使用两个反斜杠转义字符:\。例如,如果您的元素为id="foo.bar"
,则可以使用选择器$("#foo\\.bar")
。
所以在你的情况下可能需要:
var val = $(this).val()
.replace("(", "\\(")
.replace(")", "\\)");
if ($(".ui-autocomplete li:textEquals('" + val + "')").size() == 0) {
$(this).val('');
};
答案 1 :(得分:3)
作为将外部输入注入jQuery选择器的替代方法,您可以使用each()
method循环<li>
项,直到找到匹配项:
change: function (event, ui) {
var referenceValue = $(this).val();
var matches = false;
$(".ui-autocomplete li").each(function(){
if( $(this).text()==referenceValue ){
matches = true;
return false;
}
});
if(!matches){
$(this).val('');
}
}
答案 2 :(得分:3)
这是一个更好的:textEquals
自定义选择器,它不依赖于正则表达式,允许您在括号内使用所需的任何字符。
$.expr[':'].textEquals = function(a, i, m) {
return $(a).text() === m[3];
};
alert($("div:textEquals('foo(bar)')").length);