按钮单击获取每个函数中的父文本值

时间:2014-02-07 14:33:32

标签: javascript jquery

<script>
function myFun(ele){
    ele.each(function(){        
        var org = $(this).text();
        $(document).delegate('.c','click',function(){
            $(this).parent().append(org);
        });
    });
}

$(document).ready(function(e) {
    myFun($('.text'));
});
</script>
<p class="text">12345678910<span class="c"> +</span></p>
<p class="text">abcdefghijklmnopq<span class="c"> +</span></p>

我有一个测试功能,当点击“+”按钮时,它会附加父文本。

离。如果我点击第一个,它应该附加123 ...

如果我点击第二个应该附加abc ...

现在发生的事情就是追加123 ... abc ......

如何只附加父文本

4 个答案:

答案 0 :(得分:1)

你需要这样做:

$('.c').click(function () {
    $(this).append($(this).parent().text());
});

Fiddle

注意,使用当前进行绑定的方式,实际上是将两个事件绑定到每个.c类。您循环遍历所有.text类,并绑定到.c。因为有两个,你可以点击两个绑定,两个处理程序和两个执行。

答案 1 :(得分:0)

根据您的示例,here更新了jsfiddle。

function myFun(ele){
  $(document).delegate('.c','click',function() {
    var parent = $(this).parent();

    parent.append(parent.text());
  });
}

$(document).ready(function(e) {
    myFun($('.text'));
});

答案 2 :(得分:0)

以下假设您只想复制文本,而不是孩子span

DEMO

$(".text").on("click", ".c", function () {
    var parentText = $(this).parent(".text").clone().children().remove().end().text().trim();
    $(this).prepend(parentText);
});

答案 3 :(得分:0)

您的代码存在的问题是,对于每个“.text”,您调用“$(document).delegate('。c','click',...”两次(对于每个“.c”),导致两个点击处理程序附加到每个“.c”

要纠正此问题,您需要使用find函数将点击处理程序仅附加到当前“.text”中的“.c”:

function myFun(ele){
    ele.each(function(){        
        var org = $(this).text();
        $(this).find('.c').click(function(){
            $(this).parent().append(org);
        });
    });
 }