td = tr[i].getElementsByTagName("td")[3]; console.log(td);Aquí td muestra debajo de los elementos.
<td style="display: none;"> <strong>Category:</strong> <span id="cate_name">Rice </span><br> <strong>Product Code:</strong> 2132557596 <br> <strong>Num of Sale:</strong> 0 Times <br> <strong>Base Price:</strong> $65.00 <br> <strong>Rating:</strong> 0 <br> </td> Solo necesito <span id="cate_name">Rice </span><br> en esta área. En detalles, solo necesito la primera línea en ¿Cómo puedo obtenerlo?
Pruebo estos, pero en la consola muestran Uncaught TypeError: No se pueden leer las propiedades de undefined (leyendo 'getElementsById' o el nombre de la etiqueta también)
td.getElementsByID("cate_name") td.getElementsByID("cate_name").value td.getElementsByTagName("span") td.getElementsTagName("span").value and also use td[0].aboveThingNecesita usar innerText , no value .
td.getElementById("cate_name").innerText td.getElementsByTagName("span").innerTextEditar:
Lo siento. He estado "cegado" por el problema del 'texto interno', y no vi más.
getElementById solo funciona con document , porque espera que los identificadores de elementos sean únicos en el documento completo.
Y getElementsByTagName devuelve una lista de nodos.
const table = document.getElementById('id_table'); const trList = table.getElementsByTagName('tr'); // getElementById only works with document console.info(document.getElementById("cate_name").innerText) for (let i = 0; i < trList.length; i++) { const td = trList[i].getElementsByTagName("td")[0] console.info(td.getElementsByTagName("span")[0].innerText) } <table id="id_table"> <tr> <td> <strong>Category:</strong> <span id="cate_name">Rice </span><br> <strong>Product Code:</strong> 2132557596 <br> <strong>Num of Sale:</strong> 0 Times <br> <strong>Base Price:</strong> $65.00 <br> <strong>Rating:</strong> 0 <br> </td> </tr> </table>El puede estar en la primera 'línea'...
Sin embargo, el modelo de objetos de documento que representa HTML no se preocupa por los saltos de línea ni por los espacios en blanco adicionales. Más bien, se trata de dónde se encuentra en el árbol. El <span> es el segundo hijo del <td>, (índice de 1), pero no sé por qué es al que intenta llegar. ¿Es la etiqueta <span> en sí misma? o el segundo elemento hijo?
Si es la ubicación del niño dentro del td, puede recuperar todos los niños en una matriz:
td.getElementsByTagName("*")y luego puede extraer el segundo elemento secundario (nuevamente, índice de [1]) y (opcionalmente) obtener el contenido directamente...
td.getElementsByTagName("*")[1].textContentSi es el hecho de que es un <span> lo que te lleva allí...
td.getElementsByTagName("span")[0].textContentSi necesita hacerlo mediante el atributo id="cate_name", el getElementById está disponible en el nodo del documento. Esto se debe a que el HTML correctamente formado no debe reutilizar una identificación:
document.getElementById("cate_name").textContentAdemás, esta en la consola de Chrome. Otros navegadores usan llamadas de JavaScript ligeramente diferentes, como texto interno. ¿La página ya se importó con jQuery? Si es así, se pueden evitar todas las inconsistencias entre navegadores. Puedes consultarlo con...
$.fn.jqueryEsto obtendrá el número de versión de jQuery. Esta página, Stack Overflow, actualmente responde con '1.12.4'
Con jQuery, puede usar selectores de estilo CSS para encontrar su nodo en el DOM:
$("tr td:nth-child(2) span#cate_name").innerText.. o solo:
$("#cate_name").innerTextAsí que me equivoqué, td.getElementsByTagName("*") (y el asterisco entre comillas es vital) no devuelve una matriz, sino un objeto HtmlCollection especializado. Podemos convertirlo en una verdadera matriz js y manipularlo así:
var arr = [].slice.call(td.getElementsByTagName("*")); var br = arr.find(x => x.localName == "br"); // find first line break var firstRow = arr.slice(0, arr.IndexOf(br)) // first 'row' as array segment var firstRowText = firstRow.map(x => x.innerText).Join() //if you want the whole first row text