我已经查看了this,这对某一点很有帮助。
这是问题所在。我有一个通过用户点击传播到元素的用户列表;像这样的东西:
<div id="box">
joe-user
page-joe-user
someone-else
page-someone-else
</div>
点击后,我想确保用户尚未点击进入div。所以,我正在做类似的事情:
if ( ! $('#box').html().match(rcpt) )
{
update_div();
}
else
{
alert(rcpt+' already exists.');
}
然而,由于现有的javascript对正则表达式缺乏插值,导致我的警报在选择page-joe-user
的用例中触发,然后用户选择joe-user
,这显然是不完全一样。
在Perl中,我会做类似的事情:
if ( $rcpt =~ /^\Qrcpt\E/ )
{
# code
}
我想做的就是将我的match()更改为:
if ( ! $('#box').html().match(/^rcpt/) )
{
# code
}
if ( ! $('#box').html().match(rcpt) )
似乎有点有希望,但它也失败了。在函数IE new RegExp()
中使用复杂RE语法的连接也无法使用$('#box').html().match(new RegExp('^'+rcpt))
。我也试过了$('#box').html().match('/^'+rcpt'/')
。我只能想象我错过了什么。我对javascript很新。
我似乎无法在此网站上找到真正解决此类用例的任何内容。
TIA
答案 0 :(得分:2)
match
函数仅适用于字符串,而不适用于jQuery对象。
执行此操作的最佳方法是将每个用户名放入单独的HTML标记中。
例如:
<ul id="users">
<li>joe-user</li>
<li>page-joe-user</li>
<li>someone-else</li>
<li>page-someone-else</li>
</ul>
然后您可以写下以下内容:
if($('#users li').is(function () { return $(this).text() === rcpt; }))
如果你想按自己的方式去做,你应该调用text()
来获取元素中的字符串。 ($('#box').text().match(...)
)
编辑:使用HTML执行此操作的最佳方法是拆分字符串。
例如:
var userExists = false;
var users = $('#box').text().split(/\r?\n/);
for(var i = 0; i < users.length; i++) { //IE doesn't have indexOf
if (users[i] == rcpt) {
userExists = true;
break;
}
}
if (userExists) {
//Do something
}
这样做的另一个好处是不易受正则注射的影响。