使用在here中找到的常见的“如果ID存在”方法,在将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:undefined'的结果,然后跳转到:Sizzle.error = function( msg ) {throw "Syntax error, unrecognized expression: " + msg;在JQuery代码中。以这种方式使用检查和设置HTML ID是否合适的代码礼节?为什么这在流行的“存在”方法中不起作用?使用该类型的ID串联和数组字符串,如何解决该问题并使它跳过不存在的ID? 最佳答案 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不包含字符串,而仅包含正确键入的对象,因此我们可以执行)
09-16 05:56