2016-07-03 3 views

Antwort

1

querySelector() gibt ein einzelnes Element zurück, das untergeordnete Knoten enthalten kann.

querySelectorAll() gibt eine Liste von Elementen zurück, von denen jedes untergeordnete Knoten enthalten kann. Aber die Liste selbst hat keine childNodes Eigenschaft.

Sie müssen sich durch die querySelectorAll() Liste iterieren auf jeder seiner Element des Kindes Knoten wiederum zu betreiben:

Array.prototype.slice.call(document.querySelectorAll('.abcd')).forEach(function(p) { 
    Array.prototype.slice.call(p.childNodes).forEach(function (node) { 
    if (node.nodeType === Node.TEXT_NODE) { 
     var text = node.nodeValue; 

     var words = text.match(/(\S+|\s+)/g); 

     words.forEach(function (word) { 
     var isWhiteSpace = /^\s+/.test(word); 

     if (isWhiteSpace) { 
      node.parentNode.insertBefore(document.createTextNode(word), node); 
     } else { 
      var span = document.createElement('span'); 
      span.textContent = word; 
      node.parentNode.insertBefore(span, node); 
     } 
     }); 

     node.parentNode.removeChild(node); 
    } 
    }); 
}); 

Fiddle

+0

Ok, verstand ich, mein Fehler, aber sie Geige nicht einwickeln Kind-Element .. In Ihrem Beispiel sehe ich keine 'Array.prototype.slice.call'. Ich brauche es nicht um richtig zu arbeiten? – ZicoPL

+0

'Uncaught TypeError: document.querySelectorAll (...). ForEach ist keine Funktion'. Die von '.querySelectorAll' zurückgegebene NodeList hat keine '.forEach'-Methode. – undefined

+0

Danke, @Vohuman, es hat eine "forEach" -Methode in Chrome aber möglicherweise nicht andere Browser. Ich werde aktualisieren. –