2012-01-04 4 views
1

У меня есть следующий DOM структуру:JQuery: Получение родительского содержимого

<html> 
    <head> 
     <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script> 
    </head> 
    <body> 
     <div id="main"> 
      <div id="column-1"> 
       This is the column one text 
      </div> 
      <div id="column-2"> 
       <div id="part-1"> 
        Part one 
       </div> 
       <div id="part-2"> 
        Part two 
        <script type="text/javascript"> 
         alert($(this).parent().html()); 
        </script> 
       </div> 
       <div id="part-3"> 
        Part three 
       </div> 
      </div> 
     </div> 

    </body> 
</html> 

То, что я хочу, чтобы получить содержание родителя (<div id="part-2">).

Задача является инструкцией: alert($(this).parent().html()).

Почему он возвращает null?

(PS: Я знаю, что могу достичь <div id="part-2"> с $("#part-2").html(), но родительский идентификатор может динамически изменяться, поэтому я хочу, чтобы получить, что родитель с $(this).parent().html() инструкции)

+1

в вашем случае 'this' относится к' window'. – andlrc

+0

Вы не указали, что такое '$ (this)' is. – Alex

+0

@AlexThomas @AndresAL Почему он не принимает тег 'script' как текущий элемент? – Marie

ответ

1

Проблема $(this) не означает ничего в случайном фрагменте javascript. Вы не даете ему возможности. Например:

$('button').click(function() { alert($(this).parent().html()); }); 

В этом коде, $(this) относится к кнопке. Вам нужно связать какое-то событие с div, чтобы вы могли использовать $(this).parent();

Еще один способ подумать о том, что размещение javascript относительно элементов HTML не имеет отношения к объектам, таким как $(this);

Для вашего кода, можно добавить следующее:

$('div.column-2 div').click(function() { alert($(this).html()); }); 

Это предупредит HTML в DIV вы щелкнули, и он будет работать со всеми тремя в вашем примере (часть-1, часть-2 и часть-3)

0

Как я понимаю, вы хотите, чтобы показать предыдущий брат или сестра, а не родительская ... попробуйте с этим:

$("#part-2").prev().html() 
+0

ОК, если идентификатор можно изменить, вам нужно найти другую логику, чтобы найти соответствующий div ... например, ваш div всегда четный или всегда странный? У вас есть возможность установить класс в div, который вам нужен? –

0

это возвращение ноль, потому что DOM не является полным, то есть, когда JS выполняется в DIV «часть-2» не закрыт, поэтому он не может получить HTML, не считая родительского HTML, если вы положили его на кнопку, тогда он должен работать: http://jsfiddle.net/E9eA8/

Смежные вопросы