基于部分字符串的Javascript getElementById

cal*_*ebo 56 javascript getelementbyid

我需要获取元素的ID,但值是动态的,只有它的开头始终是相同的.

下面是一段代码.

<form class="form-poll" id="poll-1225962377536" action="/cs/Satellite">
Run Code Online (Sandbox Code Playgroud)

ID始终以'poll-'开头,然后数字是动态的.

如何使用JavaScript而不是jQuery获取ID?

A1r*_*Pun 80

可以使用querySelector为:

document.querySelector('[id^="poll-"]').id;
Run Code Online (Sandbox Code Playgroud)

选择器意味着:获取属性[id]以字符串开头的元素"poll-".

^匹配开始
*匹配任何位置
$匹配结束

的jsfiddle

  • `querySelectorAll`很棒.除`document.querySelectorAll('[id ^ ="poll - "]')`之外,返回一个列表.我们需要迭代列表来获取id而不是使用`document.querySelectorAll('[id ^ ="poll - "]').id`. (15认同)
  • 对不起,我的例子应该更清楚了.我如何选择id为以'user-'开头且以'-image'结尾的所有元素,但中间的数字可能会有所不同. (4认同)
  • @DavePotts使用`[id ^ = user - ] [id $ = - image]`:) (4认同)
  • 如果你知道什么是动态值的END会有什么不同呢?在我的场景中,它的id ="dynamic_constant"? (3认同)
  • @JoeL` ^`匹配开头,`$`匹配结束,`*`匹配任何位置.在你的情况下,它将是`id $ ="dynamic_constant"`. (3认同)
  • 我知道开始和结束但中间是动态的情况怎么样,例如`id ='user-123456-image'` (2认同)
  • @user1785730 因为它看起来只是一个正则表达式,但它不是一个。它只是查询选择器语法的一个功能。 (2认同)
  • 实际上,querySelector API 使用的是 CSS 选择器语法 (https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors) (2认同)

nav*_*een 8

试试这个.

function getElementsByIdStartsWith(container, selectorTag, prefix) {
    var items = [];
    var myPosts = document.getElementById(container).getElementsByTagName(selectorTag);
    for (var i = 0; i < myPosts.length; i++) {
        //omitting undefined null check for brevity
        if (myPosts[i].id.lastIndexOf(prefix, 0) === 0) {
            items.push(myPosts[i]);
        }
    }
    return items;
}
Run Code Online (Sandbox Code Playgroud)

HTML标记示例.

<div id="posts">
    <div id="post-1">post 1</div>
    <div id="post-12">post 12</div>
    <div id="post-123">post 123</div>
    <div id="pst-123">post 123</div>
</div>
Run Code Online (Sandbox Code Playgroud)

称之为

var postedOnes = getElementsByIdStartsWith("posts", "div", "post-");
Run Code Online (Sandbox Code Playgroud)

在这里演示:http://jsfiddle.net/naveen/P4cFu/


Ser*_*ndt 6

querySelectorAll 与现代枚举

polls = document.querySelectorAll('[id ^= "poll-"]');
Array.prototype.forEach.call(polls, callback);

function callback(element, iterator) {
    console.log(iterator, element.id);
}
Run Code Online (Sandbox Code Playgroud)

第一行选择所有以字符串id开头的元素。第二行唤起了枚举和回调函数。^=poll-