Чи можете ви націлити елементи на батьківський елемент за допомогою event.target?


85

Я намагаюся змінити внутрішній HTML моєї сторінки, щоб він став внутрішнім HTML елемента, на який я натискаю, єдина проблема полягає в тому, що я хочу, щоб він взяв цілий елемент, такий як:

<section class="homeItem" data-detail="{"ID":"8","Name":"MacBook Air","Description":"2015 MacBook A…"20","Price":"899","Photo":"Images/Products/macbookAir.png"}"></section>

Тоді як код, який я написав у javascript:

function selectedProduct(event){
  target = event.target;
  element = document.getElementById("test");
  element.innerHTML = target.innerHTML;
}

буде націлено на конкретний елемент, на який я натискаю.

Що я хотів би досягти, це коли я натискаю де-небудь в <section>елементі, що він буде використовувати внутрішній HTML цілого елемента, а не конкретний, який я натиснув.

Я вважаю, це щось пов’язане з вибором батьківського елемента, на який клацнули, але я не впевнений і не можу знайти нічого в Інтернеті.

Якщо це можливо, я хотів би триматися подалі від JQuery

Відповіді:


150

Я думаю, що вам потрібно використовувати event.currentTarget. Він міститиме елемент, який насправді має прослуховувач подій. Так , якщо в цілому <section>має EventListener event.targetбуде Clicked елемента, то <section>буде event.currentTarget.

Інакше parentNodeможе бути те, що ви шукаєте.

посилання на currentTarget
посилання на parentNode


5
Це зробило саме те, що я хотів, дякую! Я прийму відповідь, коли таймер закінчиться.
Адам

2
врятував мене день !, event.target - це найменший тег у миші, event.currentTarget - це той, що ініціює подію
datdinhquoc

1
Здається, інтуїтивно зрозумілий. Я вважаю, що він currentTargetповинен представляти елемент, на який клацнули, тоді як targetповинен бути тим, на що була встановлена ​​подія.
Randall Coding

це саме те, що я шукав, спочатку спасибі, але у мене є одне запитання: коли я реєструю об’єкт події у своїй функції, currentTarget є нульовим, але все одно я можу отримати ідентифікатор з мого атрибута набору даних, це зареєстрована подія все ще залишається тим самим цільовим?
a_m_dev

51

Для використання батьківського елемента використовуйте parentElement:

function selectedProduct(event){
  var target = event.target;
  var parent = target.parentElement;//parent of "target"
}

2
Хоча це відповідає на питання OP, я думаю, що проблему OP слід вирішити за допомогою currentTarget.
donnywals

Це дало мені батьківський елемент найвищого рівня, що не те, що я шукав, все одно дякую, я пам’ятатиму про своє майбутнє кодування
Адам,

10
function getParent(event)
{
   return event.target.parentNode;
}

Приклади: 1. document.body.addEventListener("click", getParent, false);повертає батьківський елемент поточного елемента, який ви натиснули.

  1. Якщо ви хочете використовувати всередині будь-якої функції, передайте подію та викличте функцію так: function yourFunction(event){ var parentElement = getParent(event); }


0
$(document).on("click", function(event){
   var a = $(event.target).parents();
   var flaghide = true;
    a.each(function(index, val){
       if(val == $(container)[0]){
           flaghide = false;
        }
    });
    if(flaghide == true){
        //required code
    }
})

-1
var _RemoveBtn = document.getElementsByClassName("remove");
for(var i=0 ;  i<_RemoveBtn.length ; i++){
    _RemoveBtn[i].addEventListener('click',sample,false);
}
function sample(event){
    console.log(event.currentTarget.parentNode);    
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.