如何检测HTML5 data-*属性是否将空字符串作为值?

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)

CodePen提供的示例.

Hac*_*man 6

您的代码需要稍微调整才能工作:

$(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)

工作小提琴:http://codepen.io/anon/pen/meZbqQ

基本上只是一个范围广泛; 在您的hasId函数内部,您正在引用$(this)并询问该data('id')属性,但该范围内$(this)没有引用初始entry对象.

  • *"你的代码需要一些调整才能工作"*很棒.它以前如何?为什么需要?代码转储很少*有用*答案. (6认同)

小智 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)