嘿,以下所有代码都搜索内部文本为“Ex:Bob”的范围,并返回一个元素(即输入元素)。
<input
dojoattachpoint="textbox,focusNode,_aroundNode"
dojoattachevent="onblur:onBlur,onfocus:onFocus,onkeyup:onKeyUp"
id="2c6af1dc-80cb-44f2-864d-1fb00216895dF_SingleLine-widget"
name=""
class="dijitReset dijitTextBox notDojoDndHandle"
type="text"
tabindex="0"
aria-label="text"
width="auto"
value=""
aria-describedby="2c6af1dc-80cb-44f2-864d-1fb00216895dF_SingleLine-widget-placeholder"
style="max-width: 2.5em; width: 90%;">
<span
class="dijitPlaceHolder dijitInputField"
id="2c6af1dc-80cb-44f2-864d-1fb00216895dF_SingleLine-widget-placeholder"
style="max-width: 2.5em; width: 90%;">
Ex: Bob
</span>
和JS:
dojo.query("span.dijitPlaceHolder.dijitInputField").forEach(function(node, index, arr){
if (node.innerHTML === 'Ex: Bob') {
var foundIt = dojo.query(node).prev();
dojo.addClass(foundIt, "testClass");
}
});
而不是我需要做的事情:
class =“dijitReset dijitTextBox notDojoDndHandle testClass” 它仍然有这个:
class =“dijitReset dijitTextBox notDojoDndHandle”
问题是:如何从节点获取该输入的 ID ? (foundIt)因为我需要一个ID才能使 .addClass 工作。
答案 0 :(得分:0)
你所做的一定必须在w.r.t. addClass方法。因为dojo.addClass将一个DOM节点或其节点id(作为字符串)作为其第一个参数。请参阅this。 Dojo.query返回dom节点,这是第二个参数。如果它不适合您,我建议您使用console.log检查dojo.query方法,以检查您是否正在获取要修改的正确节点。可能那是不对的。
答案 1 :(得分:0)
这里有几点需要注意:
为此,请将代码包装在dojo.addOnLoad()
函数中,例如:
dojo.addOnLoad(function() {
// Your code
});
您正在验证内部HTML是否为"Ex: Bob"
,但是,目前您的内部HTML还包含一些换行符,也可能包含一些标签(因为您将其放在新行上)。要解决这个问题,您应该在比较之前修剪内容,例如:
if (node.innerHTML.trim() === 'Ex: Bob') {
// Your code
}
dojo.query
返回dojo.NodeList
dojo.query
模块返回dojo.NodeList
,它与需要ID或DOM节点的dojo.addClass()
函数不兼容。
dojo.NodeList
实际上是一个DOM节点数组,所以你可以写一些东西:
var foundIt = dojo.query(node).prev();
dojo.addClass(foundIt[0], "testClass"); // Retrieve the element at index 0
甚至更好,dojo.NodeList
还有一个名为addClass()
的函数,适用于这些列表,例如:
dojo.query(node).prev().addClass("testClass"); // Short and easy
dojo.NodeList::prev()
功能需要加载dojo.NodeList-traverse
,而dojo.NodeList::addClass()
功能需要加载dojo.NodeList-dom
。我不知道你实际需要列出哪些模块,但我从1.7开始自己开始使用Dojo,我习惯列出所有模块,例如:
dojo.require("dojo.query");
dojo.require("dojo.NodeList-traverse");
dojo.require("dojo.NodeList-dom");
如果你做了所有这些,你的代码应该可以正常工作,正如你在下面的小提琴中看到的那样:http://jsfiddle.net/69TDn/