2014-08-30 3 views
0

JavaScript를 사용하여 웹 페이지의 DOM 트리를 반복하고 'hipster'라는 단어의 모든 인스턴스를 링크 또는 이미지 src의 일부가 아니라면 다른 단어로 바꿔야합니다. 예를 들어 단락에 'hipster'가 표시되면 대체해야합니다. 이 이미지의 src="" URL에 있다면JavaScript : DOM 트리를 반복하고 텍스트를 바꿉니 까?

는하지만, 그 은 그것이 URL에 그 단어를 대체하기 때문에 경우 교체 할 수 없습니다한다, URL은 분명히 나옵니다.

저는 이것을 구현하는 데 정말로 어려움을 겪었습니다.

var items = document.getElementsByTagName("*"); 
    var i = 0; 
    for (i = 0; i < items.length; i++){ 
    if(i.nodeType == 3){ 
     i.html().replace(/hipster/gi, 'James Montour'); 
    } 
    else{ 
     //do nothing for now 
    } 
    } 
+1

당신이 질문을 확인 하시겠습니까? 그것은 말이되지 않습니다. 예를 들어 'hipster'가 단락에 나타나면 대체해야하지만 이미지의 src URL에있는 경우 대체해야합니다. " 당신의 사건 중 하나에서 "해서는 안된다"는 뜻이 아니 었습니까? – spender

+1

또 다시, 나는 두려워. 이제 첫 번째 및 두 번째 paras는 서로의 반대라고 말합니다. – spender

답변

0
당신이 가까이있어

있지만 : 여기에 내가 시도 한 가지입니다

  • document.getElementsByTagName('*') 텍스트 노드를 반환하지 않습니다; 그것은 텍스트 노드가 그것으로 장소

에 문자열을 수정하지 않습니다

  • replacehtml() 방법이없는

  • (IE의 이전 버전과 주석 노드)에만 요소를 가져옵니다 모든 요소의 모든 하위 항목을 가져 와서 유형을 확인하고 nodeValue을 읽고 해당하는 경우 전체 노드를 바꿀 수 있습니다.

    var elements = document.getElementsByTagName('*'); 
    
    for (var i = 0; i < elements.length; i++) { 
        var element = elements[i]; 
    
        for (var j = 0; j < element.childNodes.length; j++) { 
         var node = element.childNodes[j]; 
    
         if (node.nodeType === 3) { 
          var text = node.nodeValue; 
          var replacedText = text.replace(/hipster/gi, 'James Montour'); 
    
          if (replacedText !== text) { 
           element.replaceChild(document.createTextNode(replacedText), node); 
          } 
         } 
        } 
    } 
    

    이 페이지에서 사용해보십시오!

    var replacedText = text.replace(/hipster/gi, 'James Montour'); 
    

    이러한 라인 :

  • +0

    매력처럼 작동했습니다! 나는 nodeType으로 일한 적이 없기 때문에 거기서 잃어 버렸습니다. –

    0

    교체 대신 '힙 스터'의 변수를 사용하려면

    var needle = 'hipster'; 
    var replacement = 'James Montour'; 
    var regex = new RegExp(needle, "gi"); 
    var replacedText = text.replace(regex, replacement); 
    
    +0

    이것이 작동하지 않습니다. – JGallardo

    관련 문제