针对具有相同类

时间:2018-05-25 06:37:06

标签: javascript

我正在建立的网站上有几个按钮,某些按钮有一个类,而其他按钮有另一个。我想要做的是找到找到点击按钮的最佳方法,而不是每个按钮都有一个事件监听器。我已经提出了下面的2 for循环来找到类按钮-1和类按钮-2的所有按钮。作为一个相当新的JavaScript我只是不想养成坏习惯,所以会感谢任何有关实现这一目标的最佳方法的建议。

<section>
  <div class="button--1"></div>
  <div class="button--1"></div>
  <div class="button--2"></div>
</section>

<section>
  <div class="button--2"></div>
  <div class="button--1"></div>
  <div class="button--2"></div>
</section>

 var button1 = document.querySelectorAll('.button--1');
    var button2 = document.querySelectorAll('.button--2');

    for (var a = 0; a < button1.length; a++) {    
        button1[a].addEventListener('click',function(){
            //do something
        });
    }

    for (var b = 0; b < button2.length; b++) {
        button1[b].addEventListener('click',function(){
            //do something
        });
    }

5 个答案:

答案 0 :(得分:1)

您可以在querySelctorAll()字符串中使用多个选择器,并将其与,

分开

var button1 = document.querySelectorAll('.button--1');
var button2 = document.querySelectorAll('.button--2');
var allButtons = document.querySelectorAll('.button--1, .button--2');

console.log(button1.length);
console.log(button2.length);
console.log(allButtons.length);
<section>
  <div class="button--1"></div>
  <div class="button--1"></div>
  <div class="button--2"></div>
</section>

<section>
  <div class="button--2"></div>
  <div class="button--1"></div>
  <div class="button--2"></div>
</section>

答案 1 :(得分:1)

如果您计划有多个其他类,例如button--3…4 ... …15
您必须要使用&#34;按钮&#34;

将所有类div元素定位到哪个类(^=

(请注意,您也可以在CSS中执行此操作!)

&#13;
&#13;
var allButtons = document.querySelectorAll('div[class^=button]');
console.log("Found", allButtons.length, "div which class starts with “button”.");

for (var i = 0; i < allButtons.length; i++) {
  allButtons[i].addEventListener('click', function() {
    console.clear();
    console.log("You clicked:", this.innerHTML);
  });
}
&#13;
/* Some styling */

section {
  margin: 8px 0;
  border: 1px solid gray;
}

section div {
  border: 1px solid lightgray;
  display: inline-block;
  margin-left: 8px;
  padding: 4px 8px;
  width: 30px;
}

section div[class^=button] {
  background: lightgray;
  cursor: pointer;
}
&#13;
<span>You can click on the buttons:</span>
<section>
  <div class="button--1">s1-1</div>
  <div class="button--2">s1-2</div>
  <div class="button--3">s1-3</div>
  <div class="button--4">s1-4</div>
</section>
<section>
  <div class="button--1">s2-1</div>
  <div class="button--2">s2-2</div>
  <div class="button--3">s2-3</div>
  <div class="button--4">s2-4</div>
</section>
<section>
  <div class="not-a-button">not1</div>
  <div class="not-a-button">not2</div>
  <div class="not-a-button">not3</div>
  <div class="not-a-button">not4</div>
</section>
&#13;
&#13;
&#13;

希望它有所帮助。

答案 2 :(得分:1)

尝试使用event delegation

(function() {
  document.body.addEventListener("click", clickButtons);
  // ^ one handler for all clicks

  function clickButtons(evt) {
    const from = evt.target;
    if (!from.className || !/button--\d/i.test(from.className)) { return; }
    // ^check if the element clicked is one of the elements you want to handle 
    //  if it's not one of the 'buttons', do nothing
    console.log("you clicked " + from.classList);
  }
}())
.button--1:before,
.button--2:before {
  content: 'BTTN['attr(class)']';
}

.button--1,
.button--2 {
  border: 1px solid #999;
  background: #eee;
  width: 220px;
  padding: 3px;
  text-align: center;
}
<section>
  <div class="b1 button--1 section1"></div>
  <div class="b2 button--1 section1"></div>
  <div class="b3 button--2 section1"></div>
</section>

<section>
  <div class="b4 button--2 section2"></div>
  <div class="b5 button--1 section2"></div>
  <div class="b6 button--2 section2"></div>
</section>

答案 3 :(得分:1)

我的建议是使用jQuery,以便您可以这样做:

$(document).on('click', '.button--1', function() {
   // Do something
});

$(document).on('click', '.button--1', function() {
   // Do something
})

但纯粹的Javascript的一个简洁方法是创建一个绑定事件回调的函数。

function bindEvent(callback, eventType, targets) {
   targets.forEach(function(target) {
     target.addEventListener(eventType, callback);
   });
};


var button1 = document.querySelectorAll('.button--1');
var button2 = document.querySelectorAll('.button--2');

bindEvent(function() {
   // do something
}, 'click', button1);

bindEvent(function() {
   // do something
}, 'click', button2);

答案 4 :(得分:0)

在单个元素上按下并释放指针设备按钮(通常是鼠标的主按钮)时会触发click事件。

本文档将帮助您了解其工作原理MDN - Click event