jQuery保存上下文onclick

时间:2013-01-12 19:08:31

标签: javascript jquery html

是否仍然要在元素的子元素上绑定单击侦听器,同时仍将$(this)上下文指向该子元素的固定父元素? 例如,我只想说我有一个页面 -

HTML:

<p><div data-important="idthatisneeded1" class="fixedClass">
<div id="dynamicallygeneratedfirstchild">
<div id="dynamicallygeneratedsecondchild">
<a class="clickabblelinkfromtheparent" href="#">Link1</a>
</div>
</div>
</div></p>
<p><div data-important="idthatisneeded2" class="fixedClass">
<div id="dynamicallygeneratedfirstchild">
<a class="clickabblelinkfromtheparent" href="#">Link2</a>
</div>
</div></p>

我想在data-important点击.fixedClass时抓取.clickabblelinkfromtheparent的值,而不使用.parent().parent().parent(),因为它们都不可靠 -

JS:

$(".fixedClass .clickabblelinkfromtheparent").on("click",function(){alert($(this).parent().parent().data("important"));return false;});

http://jsfiddle.net/zcdSw/

我也试过了:

$(".fixedClass .clickabblelinkfromtheparent").on("click",function(){alert($(this).context(".fixedClass").data("important"));return false;});

http://jsfiddle.net/zcdSw/1/

$(".clickabblelinkfromtheparent", ".fixedClass").on("click",function(){alert($(this).data("important"));return false;});

http://jsfiddle.net/Q8a67/

$(".clickabblelinkfromtheparent", ".fixedClass").on("click",function(){alert($(this).context);return false;});

http://jsfiddle.net/Q8a67/1/

这些似乎都不起作用..那么jQuery究竟能实现这一目标究竟是什么呢?

3 个答案:

答案 0 :(得分:1)

你正在尝试这样的事吗? jsfiddle:http://jsfiddle.net/zKp3P/

$(function(){
  $('.clickabblelinkfromtheparent').on('click', function(){
    //$(this).closest('.fixedClass').data('important');
    alert($(this).closest('.fixedClass').data('important'));
  });
});

答案 1 :(得分:1)

$('.clickabblelinkfromtheparent').on('click', function(){
    alert($(this).closest('.fixedClass').data('important'));
});

答案 2 :(得分:0)

要在DOM树中检索祖先的第一个数据重要属性值,您可以根据此代码段添加树状结构:

function searchDataInParentAxe($child, key) {
  var parent = $child.parent();
  return parent.data(key) || searchDataInParentAxe(parent, key);
}

$(".clickabblelinkfromtheparent").on("click", function () {
  alert(searchDataInParentAxe($(this), 'important'));
  return false;
});

http://jsfiddle.net/zoom/2mhSQ/

请注意,使用此方法,您不再需要fixedClass。