Ottenere il div dell'elemento genitore


208

Questo dovrebbe essere davvero semplice ma sto avendo problemi con esso. Come posso ottenere un div genitore di un elemento figlio?

Il mio HTML:

<div id="test">
    <p id="myParagraph">Testing</p>
</div>

Il mio JavaScript:

var pDoc = document.getElementById("myParagraph");
var parentDiv = ??????????   

Avrei pensato document.parento parent.containeravrebbe funzionato ma continuo a ricevere not definederrori. Si noti che pDocè definito, ma non alcune variabili.

Qualche idea?

PS Preferirei evitare jQuery se possibile.

Risposte:



33

Se stai cercando un particolare tipo di elemento che è più lontano del genitore immediato, puoi usare una funzione che sale al DOM fino a quando non ne trova uno, oppure no:

// Find first ancestor of el with tagName
// or undefined if not found
function upTo(el, tagName) {
  tagName = tagName.toLowerCase();

  while (el && el.parentNode) {
    el = el.parentNode;
    if (el.tagName && el.tagName.toLowerCase() == tagName) {
      return el;
    }
  }

  // Many DOM methods return null if they don't 
  // find the element they are searching for
  // It would be OK to omit the following and just
  // return undefined
  return null;
}

con jQuery: el.closest (tagName)
Ullullu il

3
@ Ullullu: vediamo 10.000 righe di libreria o una funzione di 10 righe? ;-)
RobG

14

La proprietà pDoc.parentElemento pDoc.parentNodeti darà l'elemento genitore.




-1

Conoscere il genitore di un elemento è utile quando si tenta di posizionarli fuori dal "flusso reale" degli elementi.

Al di sotto del codice specificato verrà generato l'id del genitore dell'elemento il cui id è fornito. Può essere utilizzato per la diagnosi di disallineamento.

<!-- Patch of code to find parent -->
<p id="demo">Click the button </p>
<button onclick="parentFinder()">Find Parent</button>
<script>
function parentFinder()
{
    var x=document.getElementById("demo"); 
    var y=document.getElementById("*id of Element you want to know parent of*");
    x.innerHTML=y.parentNode.id;
}
</script>
<!-- Patch ends -->
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.