2011-02-11 83 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>