繁体   English   中英

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

[英]How can I concatenate a string using a condition?

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

编辑: if (msg == "message")... Firefox表示语法错误。 我认为这不是使用条件的正确地方。

使用它仍然没有工作可能是我的病情内嵌代码后, 编辑不正确,如果<messagset>有标记显示, <name> + <message>如果有标签则显示<name> + <message>行变量里面

(msgtg != null ? x[i].getElementsByTagName("message")[0].childNodes[0].nodeValue  : x[i].getElementsByTagName("link")[0].childNodes[0].nodeValue) +

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>";

像这样吗

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

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM