[英]How can I concatenate “this” and an additional string selector using jquery?
[英]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.