teaches - Problema de Dojo:.parent() no es una función
classdojo techers (3)
Parece que está utilizando dojo.byId
como si devuelve un dojo.NodeList
, pero no lo hace, simplemente devuelve un nodo DOM. Solo dojo.query
devuelve regularmente objetos dojo.NodeList
.
dojo.NodeList
objetos dojo.NodeList
tienen una función removeClass
(que opera en todos los nodos de la lista), y si dojo.require("dojo.NodeList-traverse")
, también tienen una función parent()
que devuelve una nueva NodeList
contiene el padres inmediatos de los nodos respectivos en la lista original.
http://dojotoolkit.org/reference-guide/dojo/NodeList-traverse.html
El fragmento de HTML:
<div class="hide_on_start">
<label>Type of Visit</label>
<div id="record_visit_type"></div>
</div>
<div class="hide_on_start">
<label>Visit Date</label>
<div id="record_visit_date"></div>
</div>
<div class="hide_on_start">
<label>Staff</label>
<div id="record_staff"></div>
</div>
El javascript que estoy usando:
>>> dojo.byId(''record_visit_type'')
<div id="record_visit_type">
>>> dojo.byId(''record_visit_type'').parent().removeClass(''hide_on_start'')
TypeError: dojo.byId("record_visit_type").parent is not a function
No entiendo cuál es el problema con dojo.byId(''record_visit_type'').parent().removeClass(''hide_on_start'')
. ¿Alguien puede explicar?
Gracias
Hay un par de problemas que veo con tu código:
Creo que lo que estás buscando es la propiedad parentNode
del domNode que estás recuperando. Este no es un método, sino una propiedad del DomNode que está buscando a través de dojo.byId
.
Además, domNodes ellos mismos para no tener un método removeClass. Probablemente desee utilizar el dojo.removeClass(domNOde, cssClass)
para hacer esto.
var recordVisitTypeDomNode = dojo.byId(''record_visit_type'');
dojo.removeClass(recordVisitTypeDomNode.parentNode, ''hide_on_start'');
parentNode tiene razón, pero he aquí cómo lo haces en dojo:
// Go from the DOM node to a NodeList
var myDomNode = dojo.byId(''record_visit_type'');
var myNodeList = dojo.query(myDomNode);
// Get the parent
dojo.require("dojo.NodeList-traverse");
var parent = myNodeList.parent()[0];
Este método de invocación de dojo.query es válido:
// Non-selector Queries:
// ---------------------
//
// If something other than a String is passed for the query,
// `dojo.query` will return a new `dojo.NodeList` instance
// constructed from that parameter alone and all further
// processing will stop. This means that if you have a reference
// to a node or NodeList, you can quickly construct a new NodeList
// from the original by calling `dojo.query(node)` or
// `dojo.query(list)`.
http://jsapi.info/dojo/1/dojo.query
Es como jquery $ (myDomNode) .parent ().