2013-04-12 56 views
-2

我在點擊ID內部選擇一個p標籤時遇到了一些麻煩,代碼如下;jQuery在此選擇p

<tbody> 
    <tr id="test1"> 
    <p> 
     Some random text that should show up in the dialog. 
    </p> 
     <td>test</td> 
     <td>test</td> 
    </tr> 
    ... the rest of the tr's are identical, nothing else to see here. 
</tbody> 


$('#test1, #test2, #test3, #test4').click(function(){ 
    $(this 'p').dialog(); 
}); 

測試直播; http://team-blandsaft.no-ip.org/

更好地習慣於在stackoverflow編輯器中編寫一些代碼。

+2

的混合題外話:TR元素中應該只有TD孩子。另外,$(這個'p')在語法上甚至不是正確的 –

+2

如果你把HTML放在一個頁面中,當DOM正在被移動時,'p'將被移動(因爲它不是'tr'的有效子節點)構建:[演示JS小提琴](http://jsfiddle.net/davidThomas/UQ2NL/)。 –

回答

4

使用.find()

$(this).find('p').dialog(); 

,或者您可以使用context selector

$('p',this).dialog(); 

內部使用find方法

正如其他人所說,你有無效的HTML與<p>爲兒童<tr>

MDN docs爲TR

許可內容:零個或多個<td><th>元素,或者他們

+2

而且它*仍然不會工作,因爲當構造DOM時,'p'將被移到'table'元素之外,*因爲它是無效的html *:[JS Fiddle](http:// jsfiddle達網絡/ davidThomas/UQ2NL /)。 –

+0

@initium,不是打開jQuery UI對話框的語法'.dialog('open')'? – Travis

+0

@initium因爲它是無效的HTML(或者把它放在'td'中),你將不得不從你的'table'中拉出這些'p'元素。如果你把它們從表格中拉出來,你可以給它們全部一個類,然後選擇該類來激活你的對話框:'$('。dialog-class')。dialog();'。這樣你就不依賴於你的'table'來選擇哪些元素變成對話框。 – ajp15243

0
$('#test1, #test2, #test3, #test4').click(function(){ 
    $(this).children('p').dialog(); 
});