使用普通'如果存在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?
答案 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
}
});