Obtention du div d'élément parent


208

Cela devrait être vraiment simple mais j'ai des problèmes avec ça. Comment obtenir une division parent d'un élément enfant?

Mon HTML:

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

Mon JavaScript:

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

J'aurais pensé document.parentou parent.containertravaillerais mais je continue à recevoir des not definederreurs. Notez que le pDocest défini, mais pas certaines variables de celui-ci.

Des idées?

PS Je préférerais éviter jQuery si possible.

Réponses:



33

Si vous recherchez un type d'élément particulier qui est plus éloigné que le parent immédiat, vous pouvez utiliser une fonction qui monte le DOM jusqu'à ce qu'il en trouve un, ou pas:

// 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;
}

avec jQuery: el.closest (tagName)
Ullullu

3
@ Ullullu - voyons, 10 000 lignes de bibliothèque ou une fonction de 10 lignes? ;-)
RobG

14

La propriété pDoc.parentElementou pDoc.parentNodevous obtiendra l'élément parent.




-1

Connaître le parent d'un élément est utile lorsque vous essayez de les positionner hors du "flux réel" des éléments.

Le code donné ci-dessous affichera l'id du parent de l'élément dont l'id est fourni. Peut être utilisé pour le diagnostic de désalignement.

<!-- 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 -->
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.