Question

I've maded this in jquery that works fine:

$(document).delegate('i', 'click', function(_this){
    console.log(_this.target);
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.position = "fixed";
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.left = '5px';
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.top = '50px';
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.width = "200px";
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.height = "125px";
});



but I need to make it in pure javascript, NO jquery.

document.addEventListener("click",function(e) {
 if(e.target && e.target.nodeName == "I") {   
    console.log(e.target);
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.position = "fixed";
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.left = '5px';
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.top = '50px';
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.width = "200px";
    this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.height = "125px";
 }
});

This does not work... what I'm doing wrong?

Was it helpful?

Solution

Loop through all i's and bind the event on the element.

 Array.prototype.forEach.call(document.querySelectorAll("i"), function (elem) {
     elem.addEventListener("click", function (e) {
         this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.position = "fixed";
         this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.left = '5px';
         this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.top = '50px';
         this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.width = "200px";
         this.parentElement.firstElementChild.firstElementChild.firstElementChild.style.height = "125px";
     });
 })

Delegate version:

 document.addEventListener("click", function (e) {
        if (e.target && e.target.tagName.toLowerCase() == "i") {
            e.target.parentElement.firstElementChild.firstElementChild.firstElementChild.style.position = "fixed";
            e.target.parentElement.firstElementChild.firstElementChild.firstElementChild.style.left = '5px';
            e.target.parentElement.firstElementChild.firstElementChild.firstElementChild.style.top = '50px';
            e.target.parentElement.firstElementChild.firstElementChild.firstElementChild.style.width = "200px";
            e.target.parentElement.firstElementChild.firstElementChild.firstElementChild.style.height = "125px";
        }
    });
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top