4

我已经看过这个,这在一定程度上很有帮助。

这就是问题所在。我有一个通过用户点击传播到元素中的用户列表;像这样的东西:

<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 对正则表达式的插值,导致我的警报在 where page-joe-useris selected 然后用户 select的用例中触发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

4

1 回答 1

3

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
}

这具有不易受到正则表达式注入的额外好处。

于 2009-12-24T01:37:45.047 回答