2013-07-15 4 views
0

Мне нужно получить основной класс div culpritClass, который хранит все после того, как что-то набирается, и вводится нажатие и помещается в переменную в виде строки.Как получить верхнюю часть родительского класса div

Я не могу получить класс.

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 - это линия, которая имеет значение.

+0

Если вы знаете, что '.culpritClass' - это то, что вы хотите найти, вы можете использовать' .closest (".culpritClass") '. Это нормально? – Jon

+0

Читать это сообщение http://stackoverflow.com/questions/7089229/how-to-select-first-parent-div-using-jquery вы можете понять лучше –

ответ

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

должен делать Хитрость. Несмотря на то, что это не похоже на самое опрятное решение, это самый простой вариант. Если есть функция, чтобы передать аргумент функции, которая перемещает число вверх, например. ancestor(3), который будет перемещаться на три уровня в DOM и возвращать этот элемент.

Но если вы просто пытаетесь найти сам класс, попробуйте ближе всего.

var ru = $(this).closest('.culpritClass'); 
+0

Я не знаю имя класса upfront, я думал, что это само собой разумеется. Это просто и идеально подходит для моей проблемы, спасибо. – dzumla011

0

Попробуйте это,

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

Если вы хотите parents.culpritClass первый элемент, то попробуйте это,

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

Попробуйте это: используйте .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'); 

Хотя Есть так много способов сделать это, вы можете выбрать, как вам нравится :)

Demo

+0

Вы выбираете '.culpritClass', и снова вы находите 'attr class', его не даст вам тот же класс' culpritClass'? –

+0

OP должен получить главный '.cuppritClass', поэтому было бы довольно просто использовать' .closest ('. CulpritClass') ' –

0

Вы можете также использовать

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

вместо

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

Я бы с $(this).parents('.culpritClass') или, если вы не «знать» класс, но вы знаете, что у него есть 3 родителям точно, то $(this).parent().parent().parent()

Проблема в вашей JS заключается в том, что в textarea есть n o prev(), вы должны изменить это тоже parent(), и он будет работать.

0
$(document).ready(function() { 
    $('.chat_text').keypress(function(e) { 
     if (e.keyCode == '13') {     
      var ru = $(this).closest("div").parent();    
      alert($(ru).html()); 
     } 
    }); 

});

+0

Обратите внимание, что в вопросе пользователь хочет, чтобы 3-й дивизор поднимался и не был самым близким. –