2013-02-13 6 views
0

jQuery/Javascript를 사용하여 HTML 컨텐트를 구문 분석하려고합니다. 나는 대괄호 사이의 단어를 찾고 전체 단어를 링크로 변경하려고합니다.웹 페이지의 링크를 대괄호로 바꿉니다.

예 : 나는 대괄호 사이에 단어의 모든 인스턴스를 찾을 수 있습니다

<div> 
    This is text inside a div. It has a reference to an <a href='/dictionary#Article'>Article</a> 
</div> 

:이 같은 무언가로 이중 괄호 안에 무엇을 변경하는 정규 표현식을 사용하려고 해요

<div> 
    This is text inside a div. It has a reference to an [[Article]] 
</div> 

이 정규식 :

$('article').html().match(/[^[\]]+(?=])/g) 

하지만 텍스트를 바꾸는 방법을 모릅니다. .

답변

3
$("div").html(function(i, html) { 
    return html.replace(/\[\[(.+?)\]\]/g, "<a href='/dictionary#$1'>$1</a>"); 
}); 

DEMO : 같은http://jsfiddle.net/y4N6e/

+1

나에게 매우 깨끗한 해결책을 두들겨 라. 이것은 중첩 된 요소에 바인딩 된 핸들러를 지 웁니다. 그러나 'div'자손에 이벤트 핸들러가 연결되어 있지 않으면 textNodes를 반복 할 가치가 없습니다. –

+0

이 기능은 완벽하게 작동하지만 몇 가지 유형을 대체하는 경우 성능이 용납 될 수 없습니다. Regexes는 매우 효율적이지 않습니다. 대괄호로 묶인 태그가 많은 위키 나 포럼 또는 뭔가를 만들고 있다면, 대신에 각 태그의 시작과 끝의 색인을 붙잡고 인터프리터 함수로 전달할 수 있습니다. – user1618143

+0

@ FabrícioMatté 사실, 나는 그것에 대해서도 생각했고, 처음에는 .contents() 솔루션을 제공하기를 원했습니다. 마지막으로 간단한 innerHTML 변경으로 이동하기로 결정했습니다. – VisioN

0

뭔가 :

$('div').html($('div').html().replace(/\[\[([^\]]+)\]\]/, '<a href="/dictionary#$1">$1</a>') 

작동합니다.

하지만 당신은 봐야 _.template method!

+0

'.text()'는 여기에 올바른 방법이 아닙니다. – VisioN

+0

'.text()'를 검색하면 모든 자손 요소가 제거되고'.text()'를 설정하면 anchor 요소가 생성되지 않고 textNodes 만 생성됩니다. –

관련 문제