使用.length检查JQuery中是否存在带有concat数组的元素

时间:2014-04-03 17:32:27

标签: javascript jquery html arrays concat

使用普通'如果存在ID'找到here的方法,在将ID与下面的数组变量连接时,是否仍然可以检查ID是否存在?

for (var i=0; i < lineData.length; i++)
{
    optionData = lineData[i].split(",");
    if ($("#" + optionData[0]).length)
    {
        $("#" + optionData[0]).text(optionData[1]);
    }
}

在调试中运行此功能时,如果已合并的$("#" + optionData[0]) ID不存在,则会产生未定义的结果:undefined&#39;并跳转到:

Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;

在JQuery代码中。

使用这种方式检查和设置HTML ID是否是正确的代码礼仪?为什么这不适用于流行的&#39;存在&#39;方法?我该怎么做才能修复它,并使用这种类型的ID连接与数组字符串跳过不存在的ID?

2 个答案:

答案 0 :(得分:1)

http://jsfiddle.net/P824r/工作正常,所以问题不在你想象的地方。简化您的代码并添加一些检查。你也没有做任何需要jQuery的事情,所以我不知道这是一个jQuery问题,但很好:

function handler(data, i) {
    var optionData = data.split(","),
        $element;
    if (optionData[0] && optionData[1]) {
      $element = $("#" + optionData[0]);
      if ($element.length > 0) {
        // omitting >0 as 'trick' causes JS coercion from number to boolean.
        // there's literally no reason to ever do so: it's both slower and
        // hides your intention to others reading your code
        $element.text(optionData[1]);
      }
    } else { console.error("unexpected optionData:", optionData);
}
lineData.forEach(handler);

但是我们可以在没有jQuery的情况下做到这一点,因为在相同数量的调用中我们并没有真正使用普通JS所做的任何事情:

function handler(data) {
    var optionData = data.split(",");
    if (optionData.length === 2) {
      var id = optionData[0],
          content = optionData[1],
          element = document.getElementById(id);
          // because remember: ids are unique, we either get 0
          // or 1 result. always. jQuery makes no sense here.
      if (element) {
        element.textContent = content;
      }
    } else { console.error("unexpected input:", optionData);
}
lineData.forEach(handler);

(非jquery版本将optionsData解压缩到单独的变量中以提高易读性,但最终的易读性是确保lineData不包含字符串,但只包含正确的键控对象,所以我们可以做forEach(function(data) { ... use data.id and data.content straight up ... })

答案 1 :(得分:1)

如果你想保持这个与jQuery相关的东西,还有更多&#34;语法糖&#34;你没有使用:

// check for ID in array
jQuery.each(someArray,
    function(index, value) {
        var the_id = $(value).attr('id');
        if ( the_id !== undefined && the_id !== false ) {
            // This item has an id
        }
});