event.targetを使用して要素の親要素をターゲットにできますか?


87

ページの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>

私がjavascriptで書いたコードは:

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

クリックした特定の要素をターゲットにします。

私が達成したいのは、<section>要素の任意の場所をクリックすると、クリックした特定の要素ではなく、要素全体のinnerHTMLが取得されることです。

クリックされた要素の親要素を選択することと関係があると思いますが、よくわからず、オンラインで何も見つかりません。

可能であれば、JQueryから離れたいと思います

回答:


163

必要なのはを使用することだと思いますevent.currentTarget。これには、実際にイベントリスナーを持つ要素が含まれます。したがって、全体<section>にeventlistenerevent.targetがクリックされた要素である場合、<section>はになりますevent.currentTarget

そうでなければparentNodeあなたが探しているものかもしれません。

currentTargetへのリンクparentNodeへの
リンク


5
これは私が望んでいたことを正確に実行しました、ありがとう!タイマーが切れたら回答を受け付けます。
アダム

2
その日私を救った!event.targetマウスで最小のタグで、event.currentTargetがトリガーイベントを有するものである
datdinhquoc

1
直感に反しているようです。私が思うだろうcurrentTargetしながら、要素は、クリック表すべきtargetイベントが上に設定されたものでなければなりません。
RandallCoding20年

それはまさに私が探していたものでした。最初に感謝しますが、1つの質問があります。関数にイベントオブジェクトを記録すると、currentTargetはnullになりますが、データセット属性からIDを取得できます。これはログに記録されたイベントです。それでも同じe.targetですか?
a_m_dev

53

要素の親を使用するには、次を使用しますparentElement

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

2
これはOPの質問に答えますが、OPの問題はで解決する必要があると思いますcurrentTarget
donnywals 2015年

これは私が探していたものではないトップレベルの親要素を私に与えました、とにかく私は私の将来のコーディングのためにこれを覚えておいてくれてありがとう
Adam

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.