Bun*_*jip 4 javascript jquery custom-data-attribute
如何使用jQuery/JavaScript检测data-*某个DOM元素的给定属性是否为空值?常见的比较运算符似乎无法正常工作,如下例所示.一世
可能接近:默认情况下检查没有值的HTML5数据属性或设置data-html5值
但这些答案都不符合这个问题.
HTML
<ul class="list">
<li class="list--item" data-id="x6gftcc-44">First entry</li>
<li class="list--item" data-id="">Last entry</li>
</ul>
<div class="message"></div>
Run Code Online (Sandbox Code Playgroud)
一些CSS
.list{
list-style-type: none;
}
.list--item{
display: inline-block;
min-width: 200px;
padding: 20px;
border: 1px solid rgb(60,64,73);
cursor: pointer;
}
.message{
display: none;
}
.message.active{
display: block;
}
.true{
color: green;
}
.false{
color: red;
}
Run Code Online (Sandbox Code Playgroud)
JavaScript
$(document).ready(function(){
$('.list--item').click(function(event, target){
function hasId(){
if ($(this).data('id') != ''){
return true;
}
else{
return false;
}
};
var entry = {
id: $(this).data('id'),
hasId: hasId()
};
if (entry.hasId){
$('.message').addClass('active true');
$('.message').text('Picked entry ID: ' + entry.id);
}
else{
$('.message').addClass('active false');
$('.message').text('Entry ID not available');
}
})
});
Run Code Online (Sandbox Code Playgroud)
您的代码需要稍微调整才能工作:
$(document).ready(function(){
$('.list--item').click(function(event, target){
function hasId(my){
if (my.data('id') != ''){
return true;
}
else{
return false;
}
};
var entry = {
id: $(this).data('id'),
hasId: hasId($(this))
};
if (entry.hasId){
$('.message').addClass('active true');
$('.message').text('Picked entry ID: ' + entry.id);
}
else{
$('.message').addClass('active false');
$('.message').text('Entry ID not available');
}
});
});
Run Code Online (Sandbox Code Playgroud)
基本上只是一个范围广泛; 在您的
hasId函数内部,您正在引用$(this)并询问该data('id')属性,但该范围内$(this)没有引用初始entry对象.
小智 5
问题是,你的hasId()函数内部$(this)并不是指正确的元素.试试这个:
function hasId(element){
if (element.data('id') != ''){
return true;
}
else{
return false;
}
};
var entry = {
id: $(this).data('id'),
hasId: hasId($(this))
};
Run Code Online (Sandbox Code Playgroud)