2016-05-30 2 views
-1

私がクリックされたアイコン<i>.onクリックすると、「E」

次のレジスタクリックOKに最も近い<h4>内のテキストを取得しようとしていますの.closestを返しませんが、それは戻りません。 h4内の値。代わりに、それはCodepenのためにあまりにも長い間、あなたが見ることができるような詳細の非常に長い配列を返します。どこが間違っつもり

<p class="icon heart"> 
    <i>icon</i> 
</p> 
<h4>this text</h4> 


$('body').on('click', '.icon.heart i', function(e){ 
    var property = []; 
    console.log('clicked!'); 
    console.log($(e).closest(".intro-text h4")); 
}); 

http://codepen.io/franhaselden/pen/pboYvZ

EDIT:

私は私のコードのレイアウトをより代表するHTMLを更新しました。 <h4>のコンテンツにアクセスするにはどうすればよいですか?

https://jsfiddle.net/0jsxjqzx/3/

+0

$(document).ready(function() { $('body').on('click', '.icon.heart i', function() { var property = []; console.log('clicked!'); console.log($(this).closest(':has(.intro-text)').find('h4').html()); }); }); 

ここに完全な例

+0

あなたのコードペンにはクラス 'intro-text'もなく、' e'はDOM要素ではなくイベントオブジェクトです。 –

+0

段落のような内容の段落要素があります。テキストのないイタリック体のテキスト。そしてそれに関連する何かの*の後ろのサブサブ・サブ見出し*。あなたのマークアップは全く意味がありません。 '

このテキスト

' – Quentin

答えて

1

あなたの最初の問題はe Eventオブジェクトではなく、DOM要素であるということです。

あなたは、おそらく、あなたは、あなたが質問にHTMLを含めることができなかったので、私は最初は気付かなかった第二の問題を(持っている、私はあなたのためにそれを固定thise.target


を意味します)。

the documentation of closestを見:セット内の各要素について

、要素自体をテストし、DOMツリー内のその先祖を通って上に横断することにより、セレクタに一致する最初の要素を取得します。

h4はイタリック体の祖先ではありません。それは見つからないでしょう。

段落に移動し、代わりにその兄弟を見つける必要があります。

$(this).closest("p").next("h4"); 
+0

または 'e.currentTarget'(場合によってはより良いかもしれません)で新しいリンクを追加しました。 –

+0

私は 'これを最初に試しました、それは同じ問題を生成します。 – user1486133

+0

'e.currentTarget'も同じ結果を生成します。 – user1486133

0

最後のconsole.logに閉じ括弧がありませんでした。
h4i,の親ではないので、closestは機能しません。nextAllを使用するとよいでしょう。

jQuery(document).ready(function() { 
    $('.iconheart').on('click', function(){ 
     var property = []; 
     console.log('clicked!'); 
     console.log($(this).nextAll("h4").html()); 
    }); 
}); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<p class="iconheart"> 
    <i>icon</i> 
</p> 
<h4>this text</h4> 
関連する問題