在没有jquery的情况下点击类($(“a.zone1”)。click(function(){})

时间:2018-01-11 15:29:19

标签: javascript

我想发送谷歌分析事件,点击与特定类的链接而不使用jquery 类似的东西...

    <script type="text/javascript">
$("a.zone1").click(function() {
     ga('send', 'event', 'button', 'visit', 'click_visit_zone1');
  var href = $(this).attr('href');
  window.open(href, '_self');
  return false;
});
$("a.zone2").click(function() {
  ga('send', 'event', 'button', 'visit', 'click_visit_zone2');
  var href = $(this).attr('href');
  window.open(href, '_self');
  return false;
});
</script>

每个.zone都有大约10个链接,

5 个答案:

答案 0 :(得分:1)

如果您希望给定类的所有<a>标记触发事件,请尝试以下操作:

&#13;
&#13;
var elems = document.querySelectorAll('a.zone1');

elems.forEach(
  function(elem) {
    elem.addEventListener('click', function(evt) {
      //ga('send', 'event', 'button', 'visit', 'click_visit_zone1');
      alert(evt.target.outerHTML);
    }, true); // <-- the `true` allows this event to happen in the capture phase.
  }
);
&#13;
<a class="zone1" href="#1">z1-1</a><br/>
<a class="zone1" href="#1">z1-2</a><br/>
<a class="zone1" href="#1">z1-3</a><br/>
<a class="zone1" href="#1">z1-4</a><br/>
<a class="zone2" href="#1">z2-1</a><br/>
<a class="zone2" href="#1">z2-2</a><br/>
<a class="zone2" href="#1">z2-3</a><br/>
<a class="zone2" href="#1">z2-4</a><br/>
&#13;
&#13;
&#13;

有关捕获阶段和泡沫阶段之间差异的信息:What is event bubbling and capturing?

答案 1 :(得分:0)

我假设您的意思是使用vanilla javascript。你可以做这样的事情

var elem = document.getElementsByClassName('zone1')[0];
//note that this function returns an array 
//even if there is only one element with that class name

elem.addEventListener('click', function(){
  ga('send', 'event', 'button', 'visit', 'click_visit_zone1');
  window.open(elem.href, '_self');
  return false;
})

答案 2 :(得分:0)

您可以使用

onclick=functionName()

在纯JavaScript函数的元素内部。

答案 3 :(得分:0)

下面将是您执行所请求的纯Javascript方式。

document.querySelector("a[class^='link']").addEventListener('click',function(ev){
    var index = this.attributes['key'].value;
    var link_name = "click_visit_link"+index;
    ga('send', 'event', 'button', 'visit', link_name);
    var href = this.attributes['href'].value
    window.open(href, '_self');
    return false;
});

请注意,设计上面列出的通用事件侦听器更好,而不是为页面上的所有此类链接单独创建事件侦听器。 (你现在可能有10个,但是他们将来可能会增加。你不想再次写同一段代码了。)

document.querySelector("a[class*='link']")

这一行基本上会选择所有具有与之关联的类的锚元素,并以&#39; list&#39;开头。

一旦拥有了所有这些元素,通过Javascript的addEventListener函数向所有这些元素添加事件监听器很简单。

document.querySelector("a[class^='link']").addEventListener('click',function(ev){

在侦听器函数中,您可以通过多种方式获取所选元素的索引。我已经使用每个链接元素的额外属性演示了它。 &#39;键&#39 ;.

    var index = this.attributes['key'].value;
    var link_name = "click_visit_link"+index;
    ga('send', 'event', 'button', 'visit', link_name);

基本上,您从关键字属性中读取链接索引并使用它来创建要发送到Google Analytics的自定义事件文本,然后读取href属性以打开链接。

您还可以探索另一种检索索引的方法。

JS Fiddle下面可能会有所帮助。 https://jsfiddle.net/cfy4yw5s/

答案 4 :(得分:0)

谢谢大家的帮助。

这就是我做的, 请随时查看以帮助我取得进展

window.onload = function() {
  var anchors = document.getElementsByTagName('a');
  for(var i = 0; i < anchors.length; i++) {
      var anchor = anchors[i];
      anchor.onclick = function() {
        if (this.className == 'click_visit_zone1' || this.className == 'click_visit_zone2'){
          ga('send', 'event', 'button', 'visit', this.className);
        }
      }
  }
}

https://codepen.io/gotcha5832/pen/QarpKx