jQuery(this)的目标是找不到元素

时间:2016-04-26 10:49:17

标签: javascript jquery

为什么会这样:

jQuery(this).closest("li").find("p").text();

但是当我把它放在一个函数中时,它不起作用:

jQuery.each(words, function(i, v) {
    jQuery(this).closest("li").find("p").text();
});

我是否需要通过this通过该功能?

完整代码:

jQuery(document).ready(function() {
    jQuery('.js-trigger-editb').bind("mouseup", function() {

        // find the p tag that contains the content and split it
        var words = jQuery(this).closest("li").find("p").text().split(" ");

        // wrap words in p tag into span tags
        jQuery.each(words, function(i, v) {
            jQuery(this).closest("li").find("p").append(jQuery("<span>").text(v));
        });

    });
});

3 个答案:

答案 0 :(得分:3)

我建议将链接保存到找到的“p”元素,不要每次都搜索它。

    var p = jQuery(this).closest("li").find("p");
    var words = p.text().split(" ");

    jQuery.each(words, function(i, v) {
        p.append(jQuery("<span>").text(v));
    });

答案 1 :(得分:1)

就像你在问题中提到的那样,函数内this的值是问题所在。在.each()的回调中,this的值是正在迭代的数组中的当前项。

这样的事情应该有效:

var elem = this; // here, 'this' is the element. Store it.

jQuery.each(words, function(i, v) {

    // use the stored element handle from 'elem'
    jQuery(elem).closest("li").find("p").append(jQuery("<span>").text(v));
});

答案 2 :(得分:1)

jQuery(this)是对DOM调用元素的引用。因此,当您在jQuery('.js-trigger-editb').bind("mouseup", function() {});jQuery.each(words, function(i, v) {});内调用它时,它是不同的元素。

尝试将其保存在.each之外。

尝试:

var $this= jQuery(this);
jQuery.each(words, function(i, v) {
    $this.closest("li").find("p").append(jQuery("<span>").text(v));
});