jQuery(this) 目標不是找到元素

jQuery(this) target isn't finding element

本文关键字:元素 this jQuery      更新时间:2023-09-26

这怎么可能:

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));
        });
    });
});

我想建议将链接保存到找到的"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));
    });

就像你在问题中提到的,函数内部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));
});
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));
});