Me pregunto cómo de la mejor manera puede ver si un contenedor div contiene un elemento secundario.
Utilice $.contains()
, especialmente si el rendimiento es una preocupación. De los documentos:
jQuery.contiene (contenedor, contenido)
devoluciones: Boolean
Descripción:Compruebe si un elemento DOM es un descendiente de otro elemento DOM.
es más eficiente que .find()
, .children()
, o .closest()
, como otros han recomendado. Tenga en cuenta, sin embargo, que solo acepta los elementos DOM como parámetros, no los objetos jQuery (que es parte de por qué su rendimiento es mejor).
En su caso, se puede hacer esto en su controlador de eventos click:
if ($.contains($("#unread")[0], this)) {
alert("unread");
} else {
alert("read");
}
EDIT: Al pensar en esto de nuevo, es probable que sea más intuitivo para buscar hacia arriba desde el elemento se ha hecho clic, en lugar de hacia abajo desde el elemento padre, y el rendimiento normalmente no sería una preocupación en un controlador de eventos click. Es decir, me gustaría optar por usar el método .closest()
(según lo sugerido por @nnnnnn y @mu es demasiado corta), por lo que mi controlador de eventos click contendría:
if ($(this).closest("#unread").length > 0) {
alert("unread");
} else {
alert("read");
}
posible duplicado de http://stackoverflow.com/ questions/648004/what-is-fastest-children-or-find-in-jquery – Vivek