javascript .replace和jQuery .map

时间:2012-04-18 03:00:09

标签: javascript jquery regex replace

我正在尝试自学使用JSON,Arrays和Strings的基础知识,所以我正在尝试构建一个简单的Regex搜索并突出显示。我的问题是,当我尝试用包含queryterm的字符串替换查询项时,它似乎不会将其返回到正在构造的新数组。

这是我的功能:

function jqueryMap() {
    var searchterm = "item"; 
    var query = new RegExp("itEM", "i");  
    var foo = $.map(array, function(value,key){
        if (value.classname.search(query) != -1){ //0 = none
            value.classname.replace(query, "<div class='highlight'>"+searchterm+"</div>"); 
            return value; 
        }
    });

    $.each(foo, function(key,value) {
        $("body").append(key +" : "+value.classname+" <br>");             
    });
}

和它正在搜索的数组:

var array = [{
    "classname": "item",
    "content": "content1"},
{
    "classname": "item",
    "content": "content2"},
{
    "classname": "item",
    "content": "content1"},
{
    "classname": "im gonna say its item",
    "content": "content1"},
{
    "classname": "blam",
    "content": "content1"},
{
    "classname": "item",
    "content": "content1"},
{
    "classname": "item3",
    "content": "content1"}];

我的问题是,为什么,当我返回“价值”时,被替换的文字不被包括在内?谢谢。

这是我的jsfiddle:http://jsfiddle.net/bmcmahen/5HQga/9/

1 个答案:

答案 0 :(得分:2)

replace返回修改后的版本。它不会修改任何内容(JavaScript字符串是不可变的)。所以你想要:

value.classname = value.classname.replace(query, "<div class='highlight'>"+searchterm+"</div>"); 

此外,常规for循环更合适,因为您返回的是相同的数组元素:

for(var i = 0; i < array.length; i++)