2012-02-12 2 views
4

мне нужно, чтобы получить ParentNode из кликнутого элемента в равнинных JS (не JQuery или других структурах) я в настоящее время с помощью document.getElementById("item_click") , но я хочу, чтобы изменить id="item_click" к class="item_click", так что я могу использовать несколько ящиков. я просто не знаю, как интегрировать this в сценарииполучить ParentNode из щелкнули элемент в виде обычного JS

< < Here's a Fiddle < играть с ним

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"; 
} 
​ 

Я хочу изменить

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

к чему-то вроде

wClick = this; 
wTile = wClick.parentNode; 

Я знаю, как сделать это в JQuery, но он не будет работать в обычном JS, как this бы быть window (я думаю)

BTW. Мне нужно (событие), так как это всего лишь штрих всего кода, который я использую.

ответ

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

это сработало отлично. не используя «это» ... но это именно то, что я искал. Спасибо. – pixelass

+0

@pixelass: вы должны знать, что, хотя он будет работать для вашего примера, если у вас есть и нажмите на вложенный элемент внутри 'div' с обработчиком, он перестанет работать, потому что' event.target' всегда самый глубокий вложенный элемент, который получил событие. –

2

«Я просто не знаю, как интегрировать this в сценарии»

Использование .call() для вызова обработчика, чтобы установить его значение this к элементу, который имеет те обработчик ...

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

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

http://jsfiddle.net/keDg2/1/ –

+0

Я тоже попробовал ваш пример. Но в моем конкретном случае другой ответ работает отлично. Как я и сказал. код - это всего лишь небольшая часть всего скрипта, и я столкнулся с проблемами с вашим решением. Спасибо за скрипку. Я попробую и пересмотрю свою галочку, если я получу ее для лучшей работы. +1 для скрипки – pixelass

Смежные вопросы