document.querySelectorAll()辅助函数不起作用

时间:2015-08-31 07:44:29

标签: javascript

我试图使用document.querySelectorAll()辅助函数作为定义的here,我将会使用它。

运行这个我得到一个错误说:

未捕获的TypeError:无法设置未定义的属性'backgroundColor'

所以我的问题是为什么这不起作用?

HTML

<!DOCTYPE html>
<html>    
<head>    
<title>Javascript tutorial</title>
</head> 
<body>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
<script type="text/javascript" src="js/script.js"></script> 
</body>
</html>

JS

function selectElement(el) {
    return document.querySelectorAll(el);
}

window.onload = function() {
    var someElement =  selectElement('.test');
    someElement.style.backgroundColor='red';
}

使用 for循环

进行了更新
function selectElement(el) {
    var element = document.querySelectorAll(el);
    for (var i = 0; i < element.length; i++) {
        return element[i];
    }
}

window.onload = function() {
    var someElement =  selectElement('.test');
    someElement.style.backgroundColor='red';
}

这应该有效......对吧? :)

3 个答案:

答案 0 :(得分:2)

document.querySelectorAll()返回一个HtmlCollection。如果要将样式应用于所有段落,则必须循环遍历该集合:

[].forEach.call(document.querySelectorAll('.test'), function(val) {
  val.style.backgroundColor = 'red';
});
<p class="test">I'm a paragraph</p>
<p class="test">I'm a paragraph</p>
<p class="test">I'm a paragraph</p>
<p class="test">I'm a paragraph</p>
<p class="test">I'm a paragraph</p>

您可以使用[].forEach.call()将HtmlCollection转换为数组,并循环遍历它。然后将样式应用于querySelectorAll()调用匹配的所有元素。

答案 1 :(得分:0)

querySelectorAll返回类似于数组的节点集合,因此您需要在nodeList集合上使用iterate并将属性添加到每个元素。

  

返回文档中的元素列表(使用与指定选择器组匹配的文档节点的深度优先预先遍历遍历)。返回的对象是NodeList。

    您的脚本中的
  1. someVar未定义
  2. 您可以使用DOMContentLoaded代替load活动
  3. 对于这种情况,您可以使用CSS而不是Javascript
  4. &#13;
    &#13;
    function selectElement(el) {
      return document.querySelectorAll(el);
    }
    
    window.onload = function() {
      var someElement = selectElement('.test');
    
      for (var i = 0; i < someElement.length; i++) {
        someElement[i].style.backgroundColor = 'red';
      }
    }
    &#13;
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    &#13;
    &#13;
    &#13;

    <强> CSS

    如果您只想设置具有类test

    的所有元素的样式

    &#13;
    &#13;
    .test {
      background: yellow;
    }
    &#13;
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    &#13;
    &#13;
    &#13;

    <强> DOMContentLoaded

    &#13;
    &#13;
    function selectElement(el) {
      return document.querySelectorAll(el);
    }
    
    document.addEventListener('DOMContentLoaded', function() {
      var someElement = selectElement('.test');
    
      for (var i = 0; i < someElement.length; i++) {
        someElement[i].style.backgroundColor = 'red';
      }
    }, false);
    &#13;
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    <p class="test">I'm a paragraph</p>
    &#13;
    &#13;
    &#13;

答案 2 :(得分:0)

style是HTML元素的属性

querySelectorAll返回所有匹配HTML元素的(类似数组)HTML集合。

您需要循环返回值并依次设置每个元素style

例如,从您链接到的页面上的第一个代码示例:

for (i=0; i<matches.length; i++)