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

Javascript 使用.length检查带有concated数组的JQuery中是否存在元素,javascript,jquery,html,arrays,concat,Javascript,Jquery,Html,Arrays,Concat,使用找到的常见“if ID exist”方法,在使用如下数组变量关联ID时,是否仍然可以检查ID是否存在 for (var i=0; i < lineData.length; i++) { optionData = lineData[i].split(","); if ($("#" + optionData[0]).length) { $("#" + optionData[0]).text(optionData[1]); } } 在JQue

使用找到的常见“if ID exist”方法,在使用如下数组变量关联ID时,是否仍然可以检查ID是否存在

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

以这种方式使用检查和设置HTML ID是正确的代码礼仪吗?为什么这在流行的“存在”方法中不起作用?使用这种类型的ID与数组字符串连接,我可以做些什么来修复它并使它跳过不存在的ID?

工作正常,因此问题不在您认为的位置。简化代码并添加一些检查。您也没有做任何需要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){…直接使用data.id和data.content…})

如果您想保持此jQuery的相关性,那么还有更多您没有使用的“语法糖”:

// 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
        }
});

optionData[0]是什么?似乎这不是字符串,因此出现语法错误thrownoptionData[0]是一个包含四个字母的字符串。很抱歉,如果不深入代码,我无法显示更多内容,但在调试器中,四个字母的字符串确实会显示为这样。您确定吗?因为代码看起来很好。尝试在optionData=lineData[i]之前添加一个变量。拆分(“,”<代码>选项数据[1]可能未定义。无论如何,我想这不会引发错误。如果我发出警报(typeof optionData[0]),我总是会得到一个字符串,甚至在“undefined”变量错误之前。我可以清楚地看到optionData数组中的数据也是有效的字符串数据。还有什么其他想法可以让我测试这个数组,看看是什么导致它抛出错误?我看不出这是如何回答这个问题的。这是一种应该作为评论的建议或更新。它也比评论所允许的要长得多。因此,答案不仅仅是“答案”。它们也可以是让你走上正轨的建议。问题不在于mimjox认为它是什么,他明确地询问了html/css/etc ettiquette。这提供了第二个请求的一部分。
// 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
        }
});