user950658
user950658

Reputation:

get parentNode of clicked element in plain JS

I need to get the parentNode of a clicked element in plain JS (no jQuery or other frameworks) I am currently using document.getElementById("item_click") but I want to change id="item_click" to class="item_click" so I can use multiple boxes. I just don't know how to integrate this in the script

Here's a Fiddle <<< play with it

HTML

<div class="item">
    <div  class="item-tester" >
        <div class="item-icon"></div>
        <div class="item-title">Item Title</div>
    </div>
    <div id="item_click" onmousedown="new_class(event)" onmouseup="revert_class(event)" onmouseout="revert_class(event)"></div>
</div>

JS

function new_class(event) {
    wClick = document.getElementById("item_click");
    wTile = wClick.parentNode;
    wTile.className = wTile.className + " added-class";
}
function revert_class(event) {
    wTile.className = "item";
}
​

I want to change

wClick = document.getElementById("item_click");
wTile = wClick.parentNode;

to something like

wClick = this;
wTile = wClick.parentNode;

I know how to do this in jQuery but it will not work in plain JS as this would be the window (I think)

BTW. I need the (event) since this is just a stripdown of the entire code I'm using.

Upvotes: 13

Views: 59393

Answers (3)

A-Sharabiani
A-Sharabiani

Reputation: 19329

You can just use event.target.parentNode (Don't need to even pass the event in the function):

function new_class() {
    var parent = event.target.parentNode;
    // Do whatever...
}

Upvotes: 5

user1106925
user1106925

Reputation:

"I just don't know how to integrate this in the script"

Use .call() to invoke the handler to set its this value to the element that has the handler...

<div id="item_click" onmousedown="new_class.call(this,event)" ...>

function new_class(event) {
    var wTile = this.parentNode;
    wTile.className = wTile.className + " added-class";
}

Upvotes: 2

Troy Watt
Troy Watt

Reputation: 888

function new_class(event) {
    wTile = event.target.parentNode;
    wTile.className = wTile.className + " added-class";
}

Upvotes: 26

Related Questions