【问题标题】:(this).parent().find('.classname') not working(this).parent().find('.classname') 不起作用
【发布时间】:2025-11-26 17:40:02
【问题描述】:

我试图让用户单击 Div 问题的点击事件,然后 Jquery 克隆 Div 答案并将其显示在单独的 Div 克隆中。

这里的例子: http://jsfiddle.net/jessikwa/zNL63/2/

由于某种原因,以下变量返回 null。有什么想法吗?

 var answer = $(this).parent().find(".faq-answer").clone();

完整代码:

$(document).ready(function () {
    var faqQuestion = $('.faq-question');
    var faqClone = $('.faq-clone');

    faqQuestion.click(function () {
        showAnswer();
    });

    faqClone.click(function () {
        hideAnswer();
    });

    function showAnswer() {
        $(".faq-clone").hide("slide");
        $('.faq-clone').html("");

        var answer = $(this).parent().find(".faq-answer").clone();
        $('.faq-clone').append(answer.html());
        $(".faq-clone").show("slide");
    }

    function hideAnswer() {
        $(".faq-clone").hide("slide");
        $('.faq-clone').html("");
    }
});

【问题讨论】:

  • 所引用的元素 (this) 未传递给函数。 jsfiddle.net/zNL63/4
  • 克隆隐藏元素并显示克隆的要点在哪里? jsfiddle.net/zNL63/11
  • 问题/答案通过 VB 循环来自 XML 文档。想要的效果是弹出答案能够在包含答案/问题 div 的容器之外发生,因此最好将其克隆到该容器外部的单独 div 中。

标签: javascript jquery html css clone


【解决方案1】:

解决这个问题的最简单方法是通过引用传递处理程序:

faqQuestion.click(showAnswer);

faqClone.click(hideAnswer);

现在showAnswerhideAnswer 中的this 将成为被点击的元素。

【讨论】:

  • 我喜欢你的解决方案。 +1
  • 我现在明白了。其他答案似乎有效,但这个似乎最好。谢谢!
【解决方案2】:

您不能在函数中通过 $(this) 访问元素。您需要将其作为参数传递。

试试:

function showAnswer(passedObject) {
    $(".faq-clone").hide("slide");
    $('.faq-clone').html("");

    var answer = passedObject.parent().find(".faq-answer").clone();
    $('.faq-clone').append(answer.html());
    $(".faq-clone").show("slide");
 }

然后您将使用该函数:showAnswer($(this))

@Kevin B 建议使用更合乎逻辑和更简洁的解决方案。

【讨论】:

  • 不过我很好奇。像 show() 这样的 jQuery 函数是如何工作的?
  • @smerny 我不是这个意思。我知道如何使用show()。我很好奇在哪里可以找到它的源代码。换句话说,show() 是如何定位到你正在做的 jQuery 对象的?
  • @Jason 我假设当您执行 object.show() 时,您正在对一个对象调用该函数,以便它可以访问它。
  • @Jason,关注此页面,按 ctrl+shift+j 打开 JavaScript 控制台...然后输入 $().show 并回车。
【解决方案3】:

让它更简单,使用next() jQuery 函数

你有什么理由要克隆一个隐藏元素并只显示它的克隆

DEMO

$(document).ready(function () {
    var faqQuestion = $('.faq-question');
    var faqClone = $('.faq-answer');
    faqQuestion.click(showAnswer);
    faqClone.click(hideAnswer);

    function showAnswer() {
        $(this).next('.faq-answer').show('slide');
    }

    function hideAnswer() {
        $(this).hide("slide");
    }
});

并应用于.faq-answer .faqClone CSS

您甚至可以从数据属性中生成简短的答案 :) 以缩短更多 HTML。

【讨论】:

  • 查看我对原始评论的回答
  • @jessikwa 感谢您的反馈,这很有意义:)