2011-02-11 84 views
1

我想要做這樣的事情:幫助在jQuery選擇

var showLi = $("<li></li>"); 
$(showLi).append("<a href='#' class='showData'>Show</a>"); 
$($ul).append(showLi); 
$(showLi+" a.showData").click(function(){ 
alert("clicked"); 
}); 

上面的代碼是給錯誤,當我使用的選擇添加點擊方法。 還有什麼可以做到這一點的其他方式?

感謝

+0

這是一個常見的誤解。 showLi不是一個字符串,它是一個對象。見下文。 – xzyfer 2011-02-11 10:05:16

回答

3

你可以像這樣:

var showLi = $("<li></li>"); 
$("<a href='#' class='showData'>Show</a>").appendTo(showLi).click(function(){ 
    alert("clicked"); 
}); 
$ul.append(showLi); 

這避免再次搜索該元素。 showLi已經是jQuery對象,所以你不應該再次將它傳遞給$()。通過命名變量$ul我假設它的值也是一個jQuery。如果情況並非如此,則必須將其傳遞至$()

或者,您可以創建元素:

$('<a />', {href: '#', class: 'showData', text: 'Show'}) 

你,因爲你試圖連接具有一個字符串對象得到錯誤。如果你已經有一個jQuery對象,那麼你可以用find()搜索後代。

+0

非常感謝Felix,但我想知道find()以外的東西。 – Bhupi 2011-02-11 10:08:18

+0

@Bhupi:您也可以將其作爲上下文傳遞,如其他人顯示`$('a.showData',showLi)`。但是,如果你正在尋找後代,只有這兩種可能性。或者你避免搜索,正如我所示。但爲什麼你不想使用`find()`? – 2011-02-11 10:10:31

1

使用showLi爲背景:

$("a.showData",showLi).click([...]) 
0

試試這個:

var showLi = $("<li></li>"); 
$(showLi).append("<a href='#' class='showData'>Show</a>"); 
$($ul).append(showLi) 
$("a.showData", showLi).click(function(){ 
    alert("clicked"); 
}); 
2

您需要使用delegate()來綁定事件處理程序,因爲它在頁面加載時不在DOM中。 live()也可以工作,但委託更有效率。

下面是一個例子:

0

這個是什麼?

<script language="Javascript" type="text/javascript"> 
$(document).ready(function(){ 
    var showLi = $("<li></li>"); 
    $(showLi).append("<a href='#' class='showData'>Show</a>"); 
    $('#test').append(showLi); 
    $("a.showData").click(function(){ 
    alert("clicked"); 
    }); 
}); 
</script> 
<div id='test'></div>