4

我需要获取主culpritClassdiv 类,该类在键入内容并按下 enter 并将其作为字符串放入变量后保存所有内容。

我好像上不了课。

HTML:

<div class="culpritClass">
<div class="inner" style="display: block;">
<div class="inner_chat"></div>
<form>
<textarea class="chat_text"></textarea> 
</form>     
</div><a class="culpritClass" href="#">culprit</a>
</div>

我尝试了以下 JS,但我得到了undefined.

$('.chat_text').keypress(function(e) {
    if (e.keyCode == '13') {

        var ru = $(this).prev().parent().attr('class');

        alert(ru);
    }
});

var ru条线很重要。

4

7 回答 7

14
var ru = $(this).parent().parent().parent().attr('class');

应该做的伎俩。尽管这看起来不是最简洁的解决方案,但它是 imo 中最直接的一个。除非有一个函数将参数传递给一个向上传递数字的函数,例如ancestor(3),它将在 DOM 中向上传递三层并返回该元素。

但是,如果您只是想找到课程本身,请尝试最接近的。

var ru = $(this).closest('.culpritClass');
于 2013-07-15T11:57:40.557 回答
6

试试这个:使用.closest()

$('.chat_text').keypress(function(e) {
    if (e.keyCode == '13') {
       var ru = $(this).closest('.culpritClass').attr('class');
       alert(ru);
    }
});

你可以这样做:

var ru = $(this).parents().find('div').eq(0).attr('class');

或像这样:

var ru = $(this).parents().find('div:first').attr('class');

虽然有很多方法可以做到这一点,但你可以选择你喜欢的方式:)

演示

于 2013-07-15T11:57:30.817 回答
2

由于您正在重用.culpritClass,为了精确和避免多次parent()调用,请使用该parents()元素的类作为其选择器的方法:

$('.chat_text').keypress(function(e) {
  if (e.keyCode == '13') {
    alert($(this).parents('.culpritClass').attr('class'));
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h3>Place the cursor below and press ENTER</h3>
<div class="culpritClass">
  <div class="inner" style="display: block;">
    <div class="inner_chat"></div>
    <form>
      <textarea class="chat_text"></textarea>
    </form>
  </div><a class="culpritClass" href="#">culprit</a>
</div>

于 2018-07-30T14:40:22.717 回答
1

尝试这个,

$(this).closest('selector').find('div:first').attr('class');

如果你想要第parents .culpritClass一个元素,那么试试这个,

 $(this).closest('.culpritClass').find('div:first').attr('class');
于 2013-07-15T11:56:35.803 回答
1

如果你不“了解”这个班级,我会去$(this).parents('.culpritClass'),但你知道它有 3 个父母,那么$(this).parent().parent().parent()

你的 JS 中的问题是 textarea 没有prev(),你也应该改变它parent(),它会起作用。

于 2013-07-15T12:02:09.767 回答
0
$(document).ready( function() {
    $('.chat_text').keypress(function(e) {
        if (e.keyCode == '13') {                
            var ru = $(this).closest("div").parent();               
            alert($(ru).html());
        }
    });

});

于 2013-07-15T12:09:16.300 回答
0

你也可以使用

var ru = $(this).parent('form').parent('div').parent('div').attr('class');

代替

var ru = $(this).prev().parent().attr('class');
于 2013-07-15T12:02:00.903 回答