¿Cómo puedo encontrar si un elemento tiene un elemento h1 dentro?

Tengo lo siguiente:

$('#content')

Lo que me gustaría es verificar si esto tiene un elemento h1 dentro. Si es así, me gustaría hacer lo siguiente:

$('#content').buildTableOfContent();

¿Hay alguna manera de que pueda hacer esta verificación usando jQuery?

preguntado el 01 de julio de 12 a las 14:07

@loler: No, no lo hará. Devolverá un objeto jQuery, que puede tener o no elementos coincidentes. Entonces if($('#content').find('h1')) is siempre veraz (siempre entrará en el if cuadra). -

@loler: (Oh, por llorar en voz alta...) No, no lo hace: jsbin.com/ememaz Con una biblioteca como Prototype lo haría (o el DOM), porque Prototype y DOM regresan null cuando pides una sola cosa y no la encuentran. Pero jQuery está basado en conjuntos, find siempre devuelve un objeto, que puede tener cero coincidencias. -

@loler: ¡No te preocupes! Deberíamos limpiar estos comentarios. Volveré a comprobarlo dentro de unas horas y, si los tuyos ya no están, también quitaré los míos. :-) Mejor, -

3 Respuestas

Algo así debería funcionar:

if ($("#content h1").length > 0) {
    $("#content").buildTableOfContent();
}

Respondido 01 Jul 12, 14:07

@ Gemma: O si ya tienes c = $("#content"); por alguna razón, c.find("h1").length > 0. Y en lugar de .length > 0, solo puedes hacer [0], p.ej: if ($("#content h1")[0]) { /* Yes it has it */ } - TJ Crowder

Tenga en cuenta que $('#content h1') devolverá todo hijo h1, nieto h1 y así sucesivamente. $('#content').children('h1') se limitará a los descendientes directos de #content solo. - Fareesh Vijayarangam

¿Existe una necesidad real de realizar la comparación? > 0, tenía la impresión de que $('#content h1').length evaluaría a false si volviera 0 y true if > 0? - David Thomas

@DavidThomas: Sí, lo hará. O (como dije anteriormente) puede usar el tipo más corto pero un poco más incómodo [0] en lugar de .length. - TJ Crowder

Me temo que la otra respuesta es mejor esta vez. - gdoron está apoyando a Monica

Se podría hacer en una sola línea gracias a la rica API de jQuery:

$('#content:has(h1)').buildTableOfContent();

Respondido 01 Jul 12, 14:07

Si no está obsesionado con jQuery, esto es solo

if (document.getElementById("content").getElementsByTagName("H1")[0]) {
    ...build TOC...
}

Respondido 01 Jul 12, 15:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.