event.target을 사용하여 요소 상위 요소를 타겟팅 할 수 있습니까?


85

내 페이지의 innerHTML을 클릭 한 요소의 innerHTML이되도록 변경하려고합니다. 유일한 문제는 다음과 같은 전체 요소를 가져 오기를 원한다는 것입니다.

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

내가 자바 스크립트로 작성한 코드는 다음과 같습니다.

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

클릭 한 특정 요소를 타겟팅합니다.

내가 달성하고 싶은 것은 <section>요소의 아무 곳이나 클릭하면 내가 클릭 한 특정 요소가 아닌 전체 요소의 innerHTML을 사용한다는 것입니다.

클릭 한 항목의 부모 요소를 선택하는 것과 관련이 있다고 가정하지만 확실하지 않으며 온라인에서 아무것도 찾을 수 없습니다.

가능하다면 JQuery를 멀리하고 싶습니다.

답변:


150

필요한 것은 event.currentTarget. 여기에는 실제로 이벤트 리스너가있는 요소가 포함됩니다. 전체가 경우에 따라서 <section>의 EventListener가 event.target클릭 된 요소가 될 것이다는이 <section>될 것이다 event.currentTarget.

그렇지 않으면 parentNode당신이 찾고있는 것일 수 있습니다.

currentTarget에 대한
링크 parentNode에 대한 링크


5
이것은 내가 원하는 것을 정확하게 수행했습니다. 감사합니다! 타이머가 끝나면 답변을 수락하겠습니다.
Adam

2
! event.target 마우스에서 가장 작은 태그 나 날 구원 event.currentTarget는 트리거 이벤트 하나입니다
datdinhquoc

1
반 직관적 인 것 같습니다. currentTarget클릭 한 요소를 target나타내야하고 이벤트가 설정된 요소 여야 한다고 생각 합니다 .
Randall Coding

그것은 정확히 내가 찾던 것입니다. 먼저 감사합니다.하지만 한 가지 질문이 있습니다. 내 함수에 이벤트 개체를 기록하면 currentTarget이 null이지만 여전히 데이터 집합 속성에서 ID를 가져올 수 있습니다. 기록 된 이벤트입니다. 여전히 동일한 e.target입니까?
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);    
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.