在 jQuery 中使用 $(this) 时如何访问子元素

How do I access a sub-element when using $(this) in jQuery

我有以下代码:

$(document).ready(function(){

    $(document).on('click', '.mydiv', function(){
        console.log(??????);
    });

});

我也有对应的html

<div class="mydiv">
    <p>Hello from inside a mydiv</p>
</div>
<div class="mydiv">
    <p>Hello from inside some other mydiv</p>
</div>

我的目标是当我用 mydiv 的 class 单击任何 div 时,将 p 标签内的文本打印到控制台。我知道这意味着我应该使用 $(this) 运算符,但是当我这样做时我不确定如何访问它的子元素。

我知道如果我正在使用 id(或者如果我只有这些 class 对象之一)我可以简单地做 $('#mydiv p').val(),但是我不确定如何实现这个当我我正在使用 $(this).

您可以使用 $('p',this)$(this).find('p') 获取 this 上下文中的 p 标签元素:

$(document).on('click', '.mydiv', function(){
    console.log($('p',this).text());
});

Working Demo

使用 $(this) 和 jQuery 的 .find() 您可以获得您选择的子元素:

console.log($(this).find('p').html());

有多种方法可以解决这个问题。其他人在这里提到了其中一种方法(find 方法)。 find 方法的问题在于它会找到 div 中的所有元素,而不是直接子元素。因此,如果您有嵌套在另一层的元素,它也会得到它。

使用 children 方法,它会找到元素的直接子元素,但不会找到嵌套更深的元素。

<div class="mydiv">
    <div>
        <p>Nested p</p>
    </div>
</div>

$('.mydiv').find('p'); // Finds this element, but children() will not

<div class="mydiv">
    <p>
        Direct p
    </p>
 </div>

 $('.mydiv').children('p'); // Will find this element, but find() will as well

使用 find 方法,您将找到嵌套在第二个 div 中的子项,而使用 children 方法,您将仅找到直接子项。

根据您的需要,您可以使用findchildren