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>
我正在使用的javascript:
>>> 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
我不明白dojo.byId('record_visit_type').parent().removeClass('hide_on_start')
的问题是什么。有人可以解释一下吗?
由于
答案 0 :(得分:3)
看起来你正在使用dojo.byId
,好像它返回dojo.NodeList
,但它没有 - 它只返回一个DOM节点。只有dojo.query
会定期返回dojo.NodeList
个对象。
dojo.NodeList
个对象具有removeClass
函数(可在列表中的所有节点上运行),如果您dojo.require("dojo.NodeList-traverse")
,它们还具有parent()
函数,该函数返回新NodeList
包含原始列表中各个节点的直接父节点。
http://dojotoolkit.org/reference-guide/dojo/NodeList-traverse.html
答案 1 :(得分:2)
我在您的代码中看到了几个问题:
我认为您要查找的是您要检索的domNode的parentNode
属性。这不是一种方法,而是您通过dojo.byId
查找的domNode的属性。
此外,domNodes本身没有removeClass方法。您可能希望使用dojo的dojo.removeClass(domNOde, cssClass)
方法来执行此操作。
var recordVisitTypeDomNode = dojo.byId('record_visit_type');
dojo.removeClass(recordVisitTypeDomNode.parentNode, 'hide_on_start');
答案 2 :(得分:0)
parentNode是正确的,但这是你在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];
这种调用dojo.query的方法是有效的:
// 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
就像jquery $(myDomNode).parent()。