2012-01-04 55 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(),但父ID可以動態改變,這就是爲什麼我想要得到的是父母與$(this).parent().html()指令)

+1

在你的情況'this'指'窗口'。 – andlrc 2012-01-04 13:44:46

+0

你還沒有指定'$(this)'是什麼。 – Alex 2012-01-04 13:44:53

+0

@AlexThomas @AndresAL爲什麼它沒有把'script'作爲當前元素? – Marie 2012-01-04 13:46:40

回答

1

問題是$(this)並不意味着什麼隨機的一塊JavaScript。你沒有給它一個範圍。例如:

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

在該代碼中,$(this)指按鈕。您需要將某些事件綁定到div,以便您可以使用$(this).parent();

另一種考慮它的方式是,當涉及諸如$(this)之類的對象時,javascript相對於HTML元素的放置是無關緊要的;

爲您的代碼,你可以補充一點:

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

這將提醒的div你點擊HTML,它會在你的榜樣三個工作(部分1,部分2和部分-3)

0

據我瞭解,你想顯示以前兄弟,而不是父母......試試這個:

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

好的,如果ID可以改變,你需要找到其他邏輯來找到相關的div ...例如你的div總是偶數還是總是奇數?你有能力爲你需要的課程設置課程嗎? – 2012-01-04 14:54:32

0

它返回nil,因爲DOM是不完整的,即當JS是運行格「部分2」沒有關閉,因此它不能獲取HTML,不必介意父HTML,如果你把它放在一個按鈕中,那麼它應該工作: http://jsfiddle.net/E9eA8/