【发布时间】:2016-02-18 22:41:09
【问题描述】:
如果某个 DOM 元素的给定 data-* 属性具有空字符串作为值,我如何使用 jQuery / JavaScript 检测?常见的比较运算符似乎无法正常工作,如下例所示。我
可能接近于:Checking for HTML5 data attribute with no value 或 set data- html5 value by default
但这些答案都不符合这个问题。
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>
一些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;
}
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');
}
})
});
CodePen 上提供的示例。
【问题讨论】:
-
你有 html、css 和 javascript。只需将其粘贴到工作的 sn-p 中!
-
@T.J. Crowder jQuery API 文档说关于 data():描述:返回 jQuery 集合中第一个元素的命名数据存储的值,由 data(name, value) 或 HTML5 data-* 属性设置。
-
@Bunjip:对。它不仅仅是
data-*属性的访问器。它用于管理 jQuery 的内部数据存储,它将导致从data-*属性初始化(仅)。将它用作访问器只是为了获取属性值是不正确的用法,并且会使 jQuery 做额外的工作并消耗额外的内存。这也会导致混淆,因为data从不设置data-*属性。 -
@T.J.克劳德:好的,很高兴知道!感谢您的见解。我之前遇到过问题, data() 实际上不是 setting data-* 属性,而只是初始化不可见的数据存储。 IMO,jQuery 文档在这一点上应该更准确。
标签: javascript jquery custom-data-attribute