2013-11-08 7 views
1

Я пытаюсь найти текст заполнителя (заполнитель выглядит так: {{Placeholder}}) в документе, а затем получить узел, который он отделен, а затем добавить атрибут к узлу. Пока я могу найти местозаполнитель, но я не знаю, какой элемент он разделяет. Текущий код пишет Я здесь на консоль 3 раза, потому что он находится в 3-х узлах: html, body и h1. Как он может получить элементы фактического родительского узла?Получить родительский узел родителя-заполнителя

JavaScript:

function getPlaceholders(){ 
    var elements = document.getElementsByTagName("*"); 
    for(var e in elements){ 
     var element = elements[e]; 
     var html = element.innerHTML; 
     if(html && (matches = html.match(/{{(.+)}}/g))){ 
      console.log("I am here"); 
     } 
    } 
} 

HTML:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="UTF-8"> 
    </head> 
    <body> 
     <h1>Hello {{name}}!</h1> 
    </body> 
</html> 

ответ

3

Это работает: (код из here)

function getPlaceholders(){ 
    var elements = document.getElementsByTagName("*"); 
    for(var e in elements){ 
     var element = elements[e]; 
     child = element.firstChild, 
     texts = []; 

     while (child) { 
      if (child.nodeType == 3) { 
       texts.push(child.data); 
      } 
      child = child.nextSibling; 
     } 

     var html = texts.join(""); 
     if(html && (matches = html.match(/{{(.+)}}/g))){ 
      console.log(html); 
     } 
    } 
} 

http://jsfiddle.net/wumm/2VjVa/ (Игнорируйте первый журнал, это только часть пути jsfiddle построен)

+0

Это все еще дает 3 найдены результаты. –

+0

Nevermind, Он дает 2 по какой-то причине ... –

+0

@RyanNaddy Я только что осознал себя – idmean

0

Я считаю, что это может быть достигнуто только с помощью рекурсии

function getPlaceholders(elem) { 
    // we search for the {{...}} pattern ONLY for this element 
    var html = elem.firstChild.data; 
    if(html && (matches = html.match(/{{(.+)}}/g))){ 
     console.log(elem, "I am here"); 
    } 

    // if there are any descendants of this elem, we also call the getPlaceholders function for them 
    var elements = elem.children; 
    if (elements.length) { 
     for(var i = 0; i < elements.length; i++) { 
      getPlaceholders(elements[i]); 
     } 
    } 
} 

//starting at the body 
getPlaceholders(document.body); 

Вот пример: http://jsfiddle.net/Ng7j8/

Смежные вопросы