如何使用条件连接字符串?

时间:2018-08-13 05:16:15

标签: javascript xml

我的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) +

2 个答案:

答案 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,该函数将不安全,我想您已经意识到这一点,并且您不希望在那里出现静默错误。

希望有帮助。