2012-04-18 2 views
0

JSON, 배열 및 문자열 작업의 기초를 가르치려고하므로 간단한 Regex 검색 및 강조 표시를 시도하고 있습니다. 내 문제는 Queryterm을 포함하는 문자열로 쿼리 용어를 바꾸려고 할 때 생성 된 새 배열로 반환하지 않는 것입니다. 내가 '값을'돌아 왔을 때 왜하지 포함되지이다, 대체 텍스트javascript .replace 및 jQuery .map

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

내 질문을한다 :

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

하고 검색 있다는 배열 :

여기 내 기능입니까? 감사. http://jsfiddle.net/bmcmahen/5HQga/9/

+1

가'새로운 RegExp'을 사용하지 마십시오 : 당신이 와서 같은 배열 요소를 반환하고 있기 때문에

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

또한, 일반 for 루프, 더 적합 할 것 . JavaScript에는 RegExp 리터럴이 있습니다 :'/ itEM/i' – Ryan

답변

2

는 반환에게 수정 된 버전을 대체 :

여기 내 jsfiddle입니다. 아무 것도 수정하지 않습니다 (JavaScript 문자열은 변경할 수 없음). 그래서 당신이 원하는 :

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

고마워요! 정규 for 루프가 $ .each jquery 함수를 사용하는 것보다 낫다는 것을 의미합니까? – bento

+0

@bento, 아니, 나는'map' 대신에 의미했다. –