Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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
Javascript getElementById()通配符_Javascript - Fatal编程技术网

Javascript getElementById()通配符

Javascript getElementById()通配符,javascript,Javascript,我有一个div,还有一些未定义级别的childnode 现在,我必须将每个元素的ID更改为一个div。如何实现 我想,因为它们有向上的id,所以如果父对象是id='path\u test\u maindiv',那么下一个下行对象将是'path\u test\u maindiv\u child',因此我想,我应该通过通配符来解决这个问题,例如: document.getElementById('path_test_*') 这可能吗?或者还有其他方法吗?jQuery允许您查找特定属性以特定值开头的

我有一个div,还有一些未定义级别的childnode

现在,我必须将每个元素的ID更改为一个div。如何实现

我想,因为它们有向上的id,所以如果父对象是id='path\u test\u maindiv',那么下一个下行对象将是'path\u test\u maindiv\u child',因此我想,我应该通过通配符来解决这个问题,例如:

document.getElementById('path_test_*')

这可能吗?或者还有其他方法吗?

jQuery允许您查找特定属性以特定值开头的元素

在jQuery中,您将使用

$('[id^="path_test_"]')

我认为getelementById中不允许使用通配符。 相反,您可以使用以下命令拥有各自DIV的所有子节点:

var childNodeArray = document.getElementById('DIVID').childNodes;

这将为您提供DIV中所有元素的数组。现在使用
for
循环,您可以遍历所有子元素,同时可以检查元素的类型、ID或名称,如果匹配,然后根据需要更改它。

不是在本机JavaScript中。您有多种选择:

1) 放置一个类并使用getElementsByClassName,但是

2) 做你自己的功能。比如:

function getElementsStartsWithId( id ) {
  var children = document.body.getElementsByTagName('*');
  var elements = [], child;
  for (var i = 0, length = children.length; i < length; i++) {
    child = children[i];
    if (child.id.substr(0, id.length) == id)
      elements.push(child);
  }
  return elements;
}
函数getElementsStartsWithId(id){ var children=document.body.getElementsByTagName('*'); var元素=[],子元素; for(var i=0,length=children.length;i
3) 使用库或CSS选择器。比如jQuery;)

不应将元素的ID更改为其他现有元素的ID。这是非常错误的,所以你最好在继续之前重新思考你的核心逻辑

你到底想做什么


无论如何,要获取ID以某物开头的所有元素,请按照前面的建议使用jQuery,如果不能,也可以使用纯JavaScript,请告诉我们。

在其中一条评论中,您会说:

(…)IE在我的页面上是被禁止的,因为他没有CSS。这是开发人员的管理工具,所以只有少数人会使用FF

我认为您应该从一开始就采用不同的方法,但无论如何,在较新的浏览器(ok,FF3.5)中,您可以使用它来获得类似的结果,如jQuery:

var elements = document.querySelectorAll('[id^=foo]');
// selects elements which IDs start with foo

更新:
queryselectoral()
仅在IE<8和FF 3.0中不受支持。

在2019年尝试将其作为通配符

document.querySelectorAll("[id*=path_test_]")


例如,这会包括比孩子低一级的元素吗?@Florian:不,你可以在孩子的孩子身上循环。。。。但在运行时方面可能不好;)实际上,我没有使用jQuery,但我想,也许我很快就会开始使用。。。thx;)你为什么要更改ID?也许您最初的方法是错误的,您应该使用类?只是一个想法。。。如果你发布你的HTML并描述你想要它的原因,我们可能会提供更多帮助。我最好使用纯javascript,因为我现在不使用jQuery,但以后使用mabye。我必须更改ID,因为它是在一个表单中,如果我在以后的php文件中获得了值,我将使用它重新构建一个XML文件,并使用ID重新构建结构。但是现在,一个键必须是可编辑的,所以如果它改变了,我也必须改变下面的每个ID。@Florian:那么你想克隆表单并拥有两个表单?我还是不明白你为什么需要身份证。。。你不能把ID的值写在名字里吗?哦。。。等待对于表单,只有name属性被提交,只有输入标记被提交,对吗?所以如果,我也可以手动更改它们的名称值,因为这个字段的ID中有一个数字(因为它是一个数组)。。。。你不必理解,我有时想得太大声了…@Florian:是的,这个名字是作为帖子中的密钥或获取数据提交的。不仅是
input
元素,还有所有表单元素(也可以是
select
textarea
)…是的,好的。但是只有表单元素,而不是像hm?这样的设计元素看起来很不错,因为IE在我的页面上是被禁止的,因为他不使用CSS。这是开发人员的管理工具,所以只有少数人会使用FF;)@Florian-您最好将
document.body.getElementsByTagName('*')
改为
document.getElementById('path\u test\u maindiv')。getElementsByTagName('*')
,以提高效率。当您只需要特定DIV元素中的元素时,不需要获取所有元素。:)对这是一个通用的例子。顺便说一句,未经测试。值得注意的是,这个答案虽然有效,但到2014年已经过时。请参阅下面Felix King的答案:一个支持良好的答案,不需要旋转您自己的选择器功能。谢谢!这对我在IE 11和FF中起到了作用(我没有返回元素数组,而是将每个元素的值更改为特定下拉列表中设置的值)。下面建议的“querySelectorAll”在IE 11中对我来说不起作用。是的,但无论如何它必须与FF兼容,至少在完整的第三版中是这样-generation@Florian:仅在FF 3.0中不支持它,从3.5开始支持它。。。。真的有人还在使用3.0吗?;)(无论如何,我只是想给你另一种可能性。)+1-我考虑过这个。对于封闭环境,这是最好的解决方案。您的意思是“仅在IE<8中不受支持”。(换句话说,7不受支持,但您的注释暗示它受支持)。注意:要仅获取第一个元素(类似于.getElementById),还可以使用
document.querySelector(expression)
。要获取id包含子字符串的元素,请使用表达式
'[id*=foo]'
。与此同时,旧浏览器(IE8)当用现有答案为一个八年前的问题添加答案时,指出你的答案所涉及的新方面以及它与现有答案的不同之处,以及你的答案在八年前是否有效,或者它是否依赖于在这八年中发生的某件事,如一个新的事件,是很有帮助的