2012-06-13 105 views
2

标记:JQuery的:从子元素获取数据

<ul> 
<li><a href="#" class="item-list" data-id="1">Link 1</a></li> 
<li><a href="#" class="item-list" data-id="2">Link 2</a></li> 
<li><a href="#" class="item-list" data-id="3">Link 3</a></li> 
</ul> 

jQuery中,我会选择链接1,它应该能够获取链接1的数据-ID。我试过

$('.item-list').click(function(){ 
var link = $(this); 
alert($(this).data('id')); 
}); 

它没有任何结果。

哦。该列表在加载页面后生成。我正在查询数据库以获取列表。而且,列表也可以改变,这取决于用户如何过滤dB。

谢谢。

回答

4

如果列表是在页面加载后生成的,则.click绑定可能不起作用。也许你可以试试.live,像这样:

$('.item-list').live('click', function(){ 
    var link = $(this); 
    alert($(this).data('id')); 
}); 

编辑:

我似乎总是:)忘记在jQuery 1.7,.live()已经过时了。您应该使用.on()像这样:

$("body").on("click",".item-list",function(){ 
    var link = $(this); 
    alert($(this).data('id')); 
}); 
+1

因为jQuery的1.7 ** .live()**已被弃用。使用**。on()**代替。 – Th0rndike

+1

我只是在你的评论期间编辑:) – bjornruysen

+0

老兄这是错误的使用方法,如果内容加载后将事件附加到DOM – 2012-06-13 08:27:30

2

使用。对,因为现场已被弃用,也把你的代码中document.ready()

$(function(){ //short form of document.ready   
    $("body").on("click",".item-list",function(){ 
     var link = $(this); 
     alert($(this).data('id')); 
    }); 
}); 
+0

我的例子并不完全是我的数据结构。如果它是.item-list在表中? –

+0

没有问题,直到.item-list在体内 – 2012-06-13 08:34:03

0
$('ul').on('click', '.item-list', function() { 
    var link = $(this); 
    alert(link.attr('data-id')); 
}); 

看看是否能工程

+2

不是link.attr('data-id')那么? – akalucas