Javascript 使用.length检查带有concated数组的JQuery中是否存在元素
使用找到的常见“if ID exist”方法,在使用如下数组变量关联ID时,是否仍然可以检查ID是否存在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
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
}
});