我正在使用jQuery在onClick上设置数据属性filtername
,该工作正常。
$('#tag-group ul').append('<li><i class="fa fa-times" aria-hidden="true" data-filtergroup="'+filterGroup+'" data-filtername="'+filterName+'"></i>'+text+'</li>');
它在屏幕上显示为
<li><i class="fa fa-times" aria-hidden="true" data-filtergroup="location" data-filtername="Melbourne"></i> Melbourne</li>
然后我试图在另一个onClick上再次拿起它,但它会以未定义的形式返回。当我console log $(this).text();
它工作但我控制日志$(this).data('filtername');
时,它是未定义的。如果dom是由jQuery生成的,dom是否会隐藏它?
$(document).on('click','#sau-filter-tags ul li', function(event){
var text = $(this).text();
var filterName = $(this).data('filtername');
console.log(filterName); //Undefined
});
答案 0 :(得分:7)
filtername
是li中i
标记的属性。
您需要选择i
代码:
$(document).on('click', '#sau-filter-tags ul li i', function(event) {
var text = $(this).text();
var filterName = $(this).data('filtername');
console.log(filterName); //Undefined
});
或者您需要将事件附加到li并在this
中找到我,例如:
$(this).find('i').data('filtername')
答案 1 :(得分:2)
您要定位i
代码上的数据属性。所以你必须在i
$(document).on('click','#sau-filter-tags ul li i', function(event){
var text = $(this).text();
var filterName = $(this).data('filtername');
console.log(filterName); //Undefined
});
答案 2 :(得分:1)
您正在访问包含<li>
而不是<i>
内部的属性。请尝试以下方法:
$('#sau-filter-tags li').on('click', function () {
var i = $(this.firstElementChild)
var text = i.text()
var filterName = i.data('filtername')
console.log(filterName) //=> 'Melbourne'
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li><i class="fa fa-times" aria-hidden="true" data-filtergroup="location" data-filtername="Melbourne"></i> Melbourne</li>
&#13;