代码之家  ›  专栏  ›  技术社区  ›  Florian Müller

getElementById()通配符

  •  20
  • Florian Müller  · 技术社区  · 15 年前

    我有一个div,还有一些未定义级别的子节点。

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

    我想,因为它们有向上的I d,所以如果父项是id='path_test_maindiv',那么下一个向下的是'path_test_maindiv_child',因此我想,我会用通配符来解决这个问题,例如:

    document.getElementById('path_test_*')
    

    这可能吗?或者还有别的办法吗?

    5 回复  |  直到 9 年前
        1
  •  27
  •   joksnet    15 年前

    不是本地JavaScript。您有多种选择:

    1)放置一个类并使用getElementsByClassName,但是 it doesn't work in every browser .

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

    3)使用库或CSS选择器。像jQuery;)

        2
  •  21
  •   danicotra    8 年前

    在其中一条评论中,你说:

    (…)IE无论如何在我的页面上都是被禁止的,因为他没有得到CSS。它是开发人员的一个管理工具,所以只有少数人,而且他们无论如何都会使用FF

    我认为您应该从一开始就采用不同的方法,但是为了实现它的价值,在较新的浏览器(ok,FF3.5)中,您可以使用 document.querySelectorAll() 使用它可以获得类似的结果,如jQuery:

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

    更新: querySelectorAll() 只是 not supported in IE < 8 and FF 3.0 .

        3
  •  11
  •   Jamiec    11 年前

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

    在jQuery中,您将使用

    $('[id^="path_test_"]')
    
        4
  •  0
  •   Asif Mulla    15 年前

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

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

    这将为您提供一个包含DIV中所有元素的数组 for 循环可以遍历所有子元素,同时可以检查元素类型、ID或名称(如果匹配),然后根据需要进行更改。

        5
  •  0
  •   Shadow Wizard    15 年前

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

    你到底想干什么?

    无论如何,去 得到 所有ID以某物开头的元素,按照前面的建议使用jQuery,如果不能,也可以使用纯JavaScript,让我们知道。

        6
  •  0
  •   Ivan Kolyhalov    7 年前

    2019年试试这个。

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