0

我正在从 json 输入和模板构建 HTML 字符串。

JSON 将如下所示:

...
"count": "5",
"items": {
   "classes":[],
   "href": ["index.html","search.html","brands.html","users.html","orders.html"],
   ...
}

我正在像这样在Javascript中查看:

for (i = 0; i < dyn.list.count; i += 1) {
   elem = util.getTemplate('tmp_navbar_element', temps)
     .replace('class_abc"','class_abc '+dyn.list.items.classes[i]+'"')
     .replace("href='","href='"+dyn.list.items.href[i])
    ...
}

一切正常,但我不确定处理未在 JSON 配置中传递的元素的最佳方式。

例如,如果classes = [],现在我将 undefined 添加到每个elem,因为用户没有指定一个类。

问题
是通过检查来避免“未定义”条目的唯一方法,if classes[i] !== undefined ...还是有一种更简单的方法来“仅添加一个类”?

谢谢!

4

2 回答 2

1

有几种方法,这是最简单的方法之一:

.replace('class_abc"','class_abc ' + (dyn.list.items.classes[i] || "") + '"')

这使用了奇怪强大的||运算符来使用""if dyn.list.items.classes[i]is undefined(or null, or 0, or false, or [amusingly] "")。

当然,这意味着你仍然在做一个replace你可能会避免的事情。一个更平淡的版本是:

var cls;
for (i = 0; i < dyn.list.count; i += 1) {
   elem = util.getTemplate('tmp_navbar_element', temps);
   cls = dyn.list.items.classes[i];
   if (cls) {
     elem = elem.replace('class_abc"','class_abc '+cls+'"');
   }
   elem = elem.replace("href='","href='"+dyn.list.items.href[i]);
   // ...
}
于 2013-02-17T14:26:20.473 回答
1

尝试:

for (i = 0; i < dyn.list.count; i += 1) {
   elem = util.getTemplate('tmp_navbar_element', temps)
     .replace('tmp_gridcount"','tmp_gridcount '+(dyn.list.items.classes[i] || "")+'"')
     .replace("tmp_gridcount",abc[i])
    ...
} 

修改说:“如果 dyn.list.items.classes[i] 是falsy,则插入一个空字符串”。

于 2013-02-17T14:32:48.007 回答