Element hat nach umhängen erstmal kein Parent (jquery.parent() vs DOMEle.parentNode)

jeipack

Erfahrenes Mitglied
Hi
Ich hänge mit JS eine tr-Tabellenzeile an eine andere Tabelle. In etwa so:
Javascript:
var block = $(this).parent().parent(); //Block = tr-Element

...


if(tbody.children("tr:last").length==0) {
	tobdy.html(block);
} else {
	tbody.children("tr:last").after(block);
}
Das klappt so wie es sollte.
Danach gebe ich ein Inputfeld in einer bestimmten Zelle an eine andere Funktion:
Javascript:
myFunction(block.children("[name=NyName]").children("input").get());
(Die Funktion erwartet ein DOM Element, nicht ein jQuery Element, weshalb da am Schluss noch get() aufgerufen wird
In dieser Funktion funktioniert auch alles, bis auf:
"obj.parentNode"


Vereinfachte Funktion:
Javascript:
function myFunction(obj) {
//mit jQuery funktioniert die Suche nach dem Parent einwandfrei:
$(obj).parent().parent().doSomething();

//Mit normalem JavaScript nicht:
console.log(obj); //-> Ausgabe: [input#MyID]
console.log(obj.parentNode); //-> Ausgabe: undefined 
console.log(obj.parentNode.parentNode); //-> Ausgabe: Uncaught TypeError: Cannot read property 'parentNode' of undefined 

}
Es ist für mich kein Problem, da ich die Aufrufe jetzt einfach auch auf jQuery umbaue.
Mich würde aber interessieren wieso das so ist? Vor allem, wieso jQuery den Parent findet und normales JavaScript nicht?
 
Zuletzt bearbeitet von einem Moderator:
Dein Problem ist sehr leicht zu erklären: du erhälst durch .get() nicht ein Element, sondern ein Array mit Elementen darin. Arrays haben logischerweise keine Eigenschaft .parentNode, da dies eine Eigenschaft von HTML-Elementen ist. Daraus folgt, dass es zwei Möglichkeiten gibt, um wirklich ein Element zu erhalten:
Javascript:
// Methode 1
myFunction(block.children("[name=NyName]").children("input").get(0));

// Methode 2
myFunction(block.children("[name=NyName]").children("input").get()[0]);
 

Neue Beiträge

Zurück