Dojo问题:.parent()不是函数

时间:2011-10-05 16:46:30

标签: dojo

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')的问题是什么。有人可以解释一下吗?

由于

3 个答案:

答案 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()。