我的XML在下面。我在<messageset>
标记中有两个可能的标记名称。它必须是<message>
或<time>
。根据其中的标签,我需要为页面上的div
元素设置不同的内容。
如何在这里使用if / else条件?
var x = xmlDoc.getElementsByTagName("messageset");
for (...) {
//some codes
var msg = x[i].getElementsByTagName("message")[0].tagName;
var row = "<div>" +
if (msg == "message") {
x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue;
}
else {
x[i].getElementsByTagName("link")[0].childNodes[0].nodeValue
}
+"</div>"
}
XML文件:
<messages>
<messageset>
<name>torje</name>
<time>1533904445</time>
<message>A hi fyi bk MLS egg FG ch bhi CDG jk IC</message>
</messageset>
<messageset>
<name>torje</name>
<time>1533905156</time>
<link>msgfh.gif</link>
</messageset>
</messages>
编辑:Firefox提示语法错误if (msg == "message")...
。我认为这不是使用条件的正确地方。
修改
使用内联代码后,仍然无法正常工作可能是我的情况不正确,如果<messagset>
带有标签show,<name> + <message>
带有标签然后在行变量内显示<name> + <message>
(msgtg != null ? x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue : x[i].getElementsByTagName("link")[0].childNodes[0].nodeValue) +
答案 0 :(得分:1)
if / else条件不会单独返回值,因此您不能将其用于字符串连接。因此,这不是有效的JavaScript(因此JavaSript控制台中出现Firefox错误消息):
var row = "<div>" +
if (msg == "message") {
x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue;
}
else {
x[i].getElementsByTagName("link")[0].childNodes[0].nodeValue
}
+"</div>"
但是,您可以这样做:
var row = "<div>" + (msg == "message" ? x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue : x[i].getElementsByTagName("link")[0].childNodes[0].nodeValue) + "</div>";
但是我更喜欢以下语法,因为它更具可读性:
var row = "<div>";
if (msg == "message") {
row += x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue;
}
else {
row += x[i].getElementsByTagName("link")[0].childNodes[0].nodeValue;
}
row += "</div>";
答案 1 :(得分:1)
像这样吗?
var getMessage = function(messageSetNode) {
var wrapInDiv = function(msg) {
return "<div>" + msg + "</div>";
}
var messageNode = messageSetNode.getElementsByTagName("message")[0];
if(messageNode) {
return wrapInDiv(messageNode.childNodes[0].nodeValue);
}
return wrapInDiv(messageSetNode.getElementsByTagName("link")[0].childNodes[0].nodeValue);
}
var x = xmlDoc.getElementsByTagName("messageset");
for(...) {
var row = getMessage(x[i]);
}
这里的想法是将关注点分开,在一个函数中,我选择消息(具有自己的作用域),然后在循环中调用它,还在getMessage函数中添加了一个函数,用于将所有内容包装在div中
但是,如果没有链接标记或childNodes,该函数将不安全,我想您已经意识到这一点,并且您不希望在那里出现静默错误。
希望有帮助。