una tablas tabla obtener dinamicas datos con attribute agregar javascript html

javascript - tablas - Buscar todos los nodos de texto en la página HTML



tablas dinamicas html javascript (2)

Posible duplicado:
getElementsByTagName () equivalente para textNodes

Para esta pregunta , necesitaba encontrar todos los nodos de texto en un nodo en particular. Puedo hacer esto así

function textNodesUnder(root){ var textNodes = []; addTextNodes(root); [].forEach.call(root.querySelectorAll(''*''),addTextNodes); return textNodes; function addTextNodes(el){ textNodes = textNodes.concat( [].filter.call(el.childNodes,function(k){ return k.nodeType==Node.TEXT_NODE; }) ); } }

Sin embargo, esto parece poco elegante a la luz del hecho de que con XPath uno podría simplemente consultar .//text() y terminar con él.

¿Cuál es la forma más sencilla de obtener todos los nodos de texto bajo un elemento particular en un documento HTML, que funciona en IE9 +, Safari5 +, Chrome19 +, Firefox12 +, Opera11 +?

"Más simple" se define libremente como "eficiente y corto, sin jugar al golf".


Basado en la respuesta de @kennebec, una implementación ligeramente más estricta de la misma lógica:

function textNodesUnder(node){ var all = []; for (node=node.firstChild;node;node=node.nextSibling){ if (node.nodeType==3) all.push(node); else all = all.concat(textNodesUnder(node)); } return all; }

Sin embargo, mucho más rápido, más estricto y más elegante es usar createTreeWalker para que el navegador filtre todo menos los nodos de texto para usted:

function textNodesUnder(el){ var n, a=[], walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false); while(n=walk.nextNode()) a.push(n); return a; }


function deepText(node){ var A= []; if(node){ node= node.firstChild; while(node!= null){ if(node.nodeType== 3) A[A.length]=node; else A= A.concat(deepText(node)); node= node.nextSibling; } } return A; }