2009-07-07 25 views
5

Estoy intentando acceder a un elemento utilizando un ID de uno de sus elementos anidados, utilizando JQuery. Por ejemplo: necesito encontrar 'myDiv' desde su elemento anidado 'searchBox'. El problema es que la jerarquía cambia y el cuadro de búsqueda no siempre estará en la misma posición anidada. así que básicamente necesito algo que diga: Dame el DIV que contiene el elemento con la ID de 'searchBox'. (mira a continuación) ¿Alguna sugerencia? Gracias!JQuery: obtener el div principal de un elemento anidado ID

<div id="myDiv" class="CommonGridView_ListBoxPopupPanel"> 
Some text here : 
<table><tbody><tr><td><input class="tboxw" type="text" id="btnFind"/></td> 
<td>some content</td> </tr> 
<tr> <td><textarea id="searchBox">text area content</textarea> </td> 
</tr> 
</tbody> 
</table> 
<table><tr><td></td></tr></table> 
</div> 

Respuesta

10

Si desea encontrar el elemento de envoltura DIV (independientemente de la ID en que DIV), entonces usted querrá este selector jQuery:

$("#searchBox").closest("div"); 

El c losest([selector]) function se encuentra el elemento de envoltura que coincide con el selector.

+0

"La función más cercana ([selector]) encontrará todos los elementos de ajuste que coincidan con el selector." - No, solo encontrará el más cercano. lo más cercano nunca volverá> 1 elementos. –

+0

Gracias por la aclaración Paolo - Estaba equivocado acerca de lo más cercano y edité mi respuesta. –

+0

Está bien, de hecho también me equivoqué: lo más cercano puede devolver> 1 si la parte $ (selector) devuelve más de 1 elemento (devolvería el más cercano a cada uno de los elementos del selector) –

6
$('#searchBox').parents('#myDiv') 
+0

-1 parent() no funcionará. – Wayne

+0

padres (observe el 's') funcionarán – CMS

+0

0 mi mal. Debo haberme perdido la "s". – Wayne

0

Puede utilizar este:

var searchBox = $('#searchBox'); 

// Have the searchBox jQuery object, so find the ancestors that match a specific selector. 
var parentDiv = searchBox.parents('div#myDiv'); 

La documentación completa es available here.

+0

por cierto, usar nodeName # id es más lento que simplemente especificar el id – redsquare

+0

@redsquare: en realidad no lo es, jQuery está optimizado para perdonar este error y solo busca el ID. (Le pregunté al propio John Resig sobre esto) –

+0

Lo probé yo mismo y puedo asegurarle que así fue. Haré una demostración cuando llegue al trabajo. – redsquare

2

Si conoce la identificación y recuerda que las identificaciones tienen que ser únicas, simplemente tome el elemento como lo haría normalmente.

var $parentDiv = $('#searchBox'); 

no hay ningún beneficio del uso de .parents como las respuestas anteriores muestran ya que es sólo más lento, ya que se lleva todos los padres en la jerarquía y filtros en ellos en lugar de utilizar getElemenById. Si, por ejemplo, solo conocía className, sería mejor usar .closest('div.class') como pasos que cada uno de los padres muestra uno por uno hasta encontrar una coincidencia.

La única vez que usaría .closest es si quería asegurarse de que searchBox fuera el elemento principal de su elemento.

if ($element.closest('#searchBox').length){ 
    //do something 
} 
+0

+1 para señalar la información correcta. :) –

+0

Preguntó a John Resig nuevamente sobre la etiqueta # id, dijo que funciona como se esperaba. La razón por la que hay más llamadas en curso es porque también tiene que verificar el nodeName, por lo que teóricamente podría abarcar # myid y div # myid (no al mismo tiempo). Todavía no veo por qué son tantas más llamadas, pero él dice que está bien así que estoy inclinado a creerle. –

+0

Pero, ¿qué ocurre si no conozco la ID del DIV, solo el elemento secundario? – 29er

1

Puede utilizar

$('#searchBox').parents('div:first') 

o

$('#searchBox').parents('div:eq(0)') 
0

Complejo ejemplo anidada:

encontrar el valor de texto de un-N1 haciendo clic en un N2-!!?

Solución:

<ul class="ul-N1"> 
     <li class="li-N1"> 
      <a class="a-N1"></a> 
      <ul class="ul-N2"> 
       <li class="li-N2"> 
        <a class="a-N2"> </a> 
       </li> 
      </ul> 
     </li> 
    </ul> 

Jquery:

var a-N1 = $ (this) .closest (" UL-N1 .li-N1. ") De encontrar (" a-N1.. ").texto();

Cuestiones relacionadas