0

JSON、配列、文​​字列の操作の基本を自分自身に教えようとしているので、単純な正規表現の検索とハイライトを作成しようとしています。私の問題は、クエリ用語をクエリ用語を含む文字列に置き換えようとすると、構築中の新しい配列に戻らないように見えることです。

これが私の関数です:

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"}];

私の質問は、「value」を返すときに、置き換えられたテキストが含まれていないのはなぜですか?ありがとう。

これが私のjsfiddleです:http://jsfiddle.net/bmcmahen/5HQga/9/

4

1 に答える 1

2

replaceは変更されたバージョンを返します。何も変更されません(JavaScript文字列は不変です)。あなたが望んでいるのは:

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

forまた、次の場合と同じ配列要素を返すため、通常のループの方が適切です。

for(var i = 0; i < array.length; i++)
于 2012-04-18T03:01:33.040 に答える