获取所有以班级名称开头的项目

Dai*_*dow 3 javascript regex getelementsbyclassname

我试图只显示某些div。我决定执行此操作的方法是先隐藏所有以“ page”开头的元素,然后仅显示正确的divs。这是我的(简化)代码:

<form>    
    <input type="text" onfocus="showfields(1);">
    <input type="text" onfocus="showfields(2);">
</form>
<div class="page1 row">Some content</div>
<div class="page1 row">Some content</div>
<div class="page2 row">Some content</div>
<div class="page2 row">Some content</div>
<script>
    function showfields(page){
        //hide all items that have a class starting with page*
        var patt1 = /^page/;
        var items = document.getElementsByClassName(patt1);
        console.log(items);
        for(var i = 0; i < items.length; i++){
            items[i].style.display = "none";
        }

        //now show all items that have class 'page'+page
        var item = document.getElementsByClassName('page' + page);
        item.style.display = '';
    }
</script>
Run Code Online (Sandbox Code Playgroud)

当我console.log(items);得到一个空白数组时。我很确定regexp是正确的(获取所有以'page'开头的项目)。我使用的代码是老式的JS,但我并不反对使用jQuery。另外,如果有不使用regexp的解决方案,那也很好,因为我是使用regexp的新手。

Que*_*tin 8

getElementsByClassName仅在类上匹配,而不在类中匹配。您不能将正则表达式传递给它(可以,但是它将被类型转换为字符串,这是无益的)。

最好的方法是使用多个类…

<div class="page page1">
Run Code Online (Sandbox Code Playgroud)

即这个div是一个页面,它也是一个page1。

然后,您可以简单地进行操作document.getElementsByClassName('page')


失败的话,您可以查看querySelector子字符串匹配的属性选择器

document.querySelectorAll("[class^=page]")
Run Code Online (Sandbox Code Playgroud)

…但这仅在class属性中列出pageSomething第一个类名有效。

document.querySelectorAll("[class*=page]")
Run Code Online (Sandbox Code Playgroud)

…但这将与提及“ page”的类属性匹配,而不仅限于那些以“ page”开头的类的属性(即它将匹配)class="not-page"

也就是说,您可以使用最后一种方法,然后遍历.classList以确认元素是否匹配。

<div class="page page1">
Run Code Online (Sandbox Code Playgroud)
document.querySelectorAll("[class^=page]")
Run Code Online (Sandbox Code Playgroud)


Kai*_*ido 5

以前的答案包含正确答案的一部分,但没有一个真正给出它。

为此,您需要使用逗号,分隔符在单个查询中组合两个选择器。

第一部分是[class^="page"],它将找到所有类属性以 开头的元素page,因此对于具有多个类的元素不可行,这是固定的[class*=" page"],它将找到所有类属性具有字符串某处的元素" page"(注意在开始)。

通过组合两个选择器,我们得到了 classStartsWith 选择器:

document.querySelectorAll('[class^="page"],[class*=" page"]')
  .forEach(el => el.style.backgroundColor = "green");
Run Code Online (Sandbox Code Playgroud)
<div class="page">Yes</div>
<div class="notpage">No</div>
<div class="some page">Yes</div>
<div class="pageXXX">Yes</div>
<div class="page1">Yes</div>
<div class="some">Unmatched entirely</div>
Run Code Online (Sandbox Code Playgroud)