检查数据属性是否为空

3

我希望能够遍历表格中的所有单元格,并检查它们的data属性。如果该属性(或其分配的值)不为空,则我想将其通过console.log进行输出。

目前我已经有了如下代码,但是它似乎不能正常工作(它只会说所有的都不是空的)。另外,我不确定为什么在map函数内部this指向的是window对象而不是准确的td对象。你有任何想法吗?

function checkTds() {
    var $tab = $('table td');
    $.map($tab, function(){
        console.log($(this));
        if ($tab.attr("custom-data-attribute") !== "") {
            console.log($(this));
        }
    });
}

checkTds();

2
{btsdaf} - billyonecan
1
{btsdaf} - Mouser
你可以这样做,但它们并不相同。.map() 是专门用于处理 jQuery 集合的。 - billyonecan
1个回答

4
您正在使用map,它将自己的变量分配给迭代列表:
文档中可以看到:
回调 类型:Function(Object elementOfArray,Integer indexInArray)=> Object 处理每个项的函数。函数的第一个参数是数组项,第二个参数是数组中的索引。函数可以返回任何值。返回的数组将被展平到结果数组中。在函数内部,this指向全局(window)对象。
另外,通常使用前缀data来创建自定义属性:data-«yourname»

function checkTds() {
  var $tab = $('table td');
  $.map($tab, function(element) {

    //look at the element var here
    //also check if the attribute exists!
    if ($(element).attr("custom-data-attribute") && $(element).attr("custom-data-attribute") !== "") {
      console.log($(element).attr("custom-data-attribute"));
    }
  });
}

checkTds();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td custom-data-attribute="1"></td>
    <td></td>
    <td></td>
    <td custom-data-attribute="4"></td>
  </tr>
</table>


顺便提一下:我个人建议在使用jQuery时不要使用带有前缀$的变量。这样会更容易将它们与实际的jQuery函数混淆。


{btsdaf} - DevJoe
{btsdaf} - Mouser
1
可以使用.length代替!== "" - kjdion84

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接