3

使用一个小插件来突出显示表单中输入字段中的文本字符串。

JavaScript 文本高亮 jQuery 插件

我稍微修改了代码,以允许用户通过用逗号分隔多个字符串来将多个字符串添加到输入字段中,这将突出显示多个关键字。

这在这种情况下效果很好:stack,overflow,js

但是,如果我要输入 stack,overflow,js, (注意最后一个字符串之后的 , )它会挂起浏览器并变得无响应。

我正在使用的代码是:

$(function() { 
    if ( $("input#searchterm").val().length > 0 ) {
        $("input#searchterm").addClass('marked-purple');
        var arrayOfKeyWords= $("input#searchterm").val().split(',');
        for (var i=0;i<arrayOfKeyWords.length;i++) {
            $('.message p.messagecontent').highlight(arrayOfKeyWords[i]);
        }
    }           
});

如果用户添加了最后一个逗号,是否有人知道如何忽略它?

提前致谢

4

2 回答 2

4

您可以在调用之前进行空值检查highlight(),如下所示:

if ($("#searchterm").val().length > 0) {
    $("#searchterm").addClass('marked-purple');
    var arrayOfKeyWords = $("#searchterm").val().split(',');
    for (var i = 0; i < arrayOfKeyWords.length; i++) {
        if (arrayOfKeyWords[i] !== "") { // ensure there is a value to highlight
            $('.message p.messagecontent').highlight(arrayOfKeyWords[i]);
        }
    }
}

或者,如果有的话,您可以去掉尾随逗号。

if ($("#searchterm").val().length > 0) {
    $("#searchterm").addClass('marked-purple');
    var arrayOfKeyWords = $("#searchterm").val().replace(/,+$/, '').split(',');
    for (var i = 0; i < arrayOfKeyWords.length; i++) {
        $('.message p.messagecontent').highlight(arrayOfKeyWords[i]);
    }
}
于 2012-12-19T13:42:30.613 回答
1

这就是如何删除字符串的最后一个逗号:

var str = "stack,overflow,js,"; 
if(str.charAt( str.length-1 ) == ",") {
  str = str.slice(0, -1);
}
于 2012-12-19T13:45:03.027 回答