Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dojo正在从节点获取元素属性ID_Dojo - Fatal编程技术网

Dojo正在从节点获取元素属性ID

Dojo正在从节点获取元素属性ID,dojo,Dojo,下面的所有代码都搜索一个span,该span的内部文本为“Ex:Bob”,返回一个元素(即输入元素) 而不是我需要它做什么: class=“dijitReset dijitTextBox notDojoDndHandle testClass” 它仍然有: class=“dijitReset dijitTextBox notDojoDndHandle” 问题是:如何从节点获取输入的ID?(foundIt)因为我需要一个ID才能使.addClass工作。您所做的工作必须已经在使用w.r.t.addC

下面的所有代码都搜索一个span,该span的内部文本为“Ex:Bob”,返回一个元素(即输入元素)

而不是我需要它做什么:

class=“dijitReset dijitTextBox notDojoDndHandle testClass” 它仍然有:

class=“dijitReset dijitTextBox notDojoDndHandle”


问题是:如何从节点获取输入的ID?(foundIt)因为我需要一个ID才能使.addClass工作。

您所做的工作必须已经在使用w.r.t.addClass方法。因为dojo.addClass将DOM节点或其节点id(作为字符串)作为其第一个参数。参考query返回dom节点,这是第二个参数。如果它对您不起作用,我建议您使用console.log检查dojo.query方法,以检查您实际上是否获得了要修改的正确节点。这可能是不对的。

这里有几点需要注意:

确保已加载DOM 为此,请将代码包装在
dojo.addOnLoad()函数中,例如:

dojo.addOnLoad(函数(){
//你的代码
});
修剪你的文字 您正在验证内部HTML是否为
“Ex:Bob”
,但是,当前您的内部HTML还包含一些换行符,可能还包含一些制表符(因为您将其放在了新行上)。要解决此问题,您应该在比较之前修剪内容,例如:

if(node.innerHTML.trim()=='Ex:Bob'){
//你的代码
}
dojo.query
返回一个
dojo.NodeList
dojo.query
模块返回一个
dojo.NodeList
,它与要求ID或DOM节点的
dojo.addClass()
函数不兼容

实际上,
dojo.NodeList
是一个DOM节点数组,因此您可以编写如下内容:

var foundIt=dojo.query(node.prev();
addClass(foundIt[0],“testClass”);//检索索引0处的元素
甚至更好的是,
dojo.NodeList
还有一个名为
addClass()
的函数,该函数适用于这些列表,例如:

dojo.query(node.prev().addClass(“testClass”);//简练
确保包含正确的模块
dojo.NodeList::prev()
功能需要加载
dojo.NodeList遍历
,而
dojo.NodeList::addClass()
功能需要加载
dojo.NodeList dom
。我不知道您实际上必须列出哪些模块,但我从1.7开始就使用Dojo,并且我有列出所有模块的习惯,例如:

dojo.require(“dojo.query”);
require(“dojo.NodeList遍历”);
require(“dojo.nodelistdom”);
如果您完成了所有这些,那么您的代码应该可以工作,正如您在下面的提琴中所看到的:

<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>
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");
      }
});