innerHtml() 中的 & 符号未被正确读取并在 JS 中验证
Ampersand in innerHtml() not being read correctly and validating in JS
我刚刚意识到我搞砸了原来的 HTML - 图标 classes 本来不应该出现在代码上的。现在我理解了否决票——以及 javascript 的普遍草率。我已经修改了 HTML,使其成为开始的样子。
我有一个无序列表,我正在使用 jQuery 搜索它以将 class 添加到其锚标记,具体取决于 [=46] 的 text/innerHtml =] 在列表项中:
<ul class="menu-items">
<li class="menu-item icon-globe">
<a href="/test/Mobile/Accounts.aspx" class="ui-link">Accounts</a></li>
<li class="menu-item icon-globe">
<a href="/dupont/Mobile/Transfers.aspx" class="ui-link">Transfers</a></li>
<li class="menu-item emailMenuItem icon-globe">
<a href="/test/Mobile/Messages.aspx" class="ui-link">Messages</a></li>
<li class="menu-item">
<a href="/test/CustomerService.aspx" class="ui-link">Alerts & Settings</a></li>
<li class="menu-item emailMenuItem icon-globe"><a href="/test/Mobile/DepositCheck.aspx" class="ui-link">Deposit a Check</a>
她是 jQuery 声明,应该将 "AlertSettingIcon" class 添加到警报和设置锚标记:
$("li.menu-item a.ui-link").each(function() {
if ($( this ).innerHtml == "Accounts") {
$(this).addClass("AccountIcon");
} else
if ($( this ).innerHtml == "Transfers") {
$(this).addClass("TransferIcon");
} else
if ($( this ).innerHtml == "Messages") {
$(this).addClass("MessageIcon");
} else
if ($( this ).innerHtml == "Alerts & Settings") {
$(this).addClass("AlertSettingIcon");
} else
if ($( this ).innerHtml() == "Deposit a Check") {
$(this).addClass("RDCIcon");
}
else {
$(this).addClass("AlertSettingIcon");
}
});
当我使用开发人员工具检查分配给每个锚标记的 classes 时,class 没有被添加。我试过使用 .text(),将我的脚本包装在 CDATA 标记中,.html(),使用 /u0026 和其他几种方法,但我还没有成功添加 class到 "Alerts & Settings" 锚元素。我还在 firefox 和 Chrome 中完成了这些方法中的每一个,以确保它不是浏览器兼容性。
最后,这里是一个 JSFiddle,问题本身就在这里:https://jsfiddle.net/r7vnft5c/
谁能弄清楚为什么 AlertSettingIcon class 没有在写入 JS/jQuery 时添加,我可以做些什么来解决它?
谢谢你的想法,
大卫
.innerHTML
不是一种方法。对于 jQuery,它是 $(this).html()
或对于原生 API,它将是 this.innerHTML
。
并使用更合理的流程控制结构,例如 switch
语句。
一般来说,.innerHTML
比较会比较敏感。当您只比较文本内容时,请改用 .text()
。
$("li.menu-item a.ui-link").each(function() {
switch ($(this).text()) {
case "Accounts":
$(this).addClass("AccountIcon"); break;
case "Transfers":
$(this).addClass("TransferIcon"); break;
case "Messages":
$(this).addClass("MessageIcon"); break;
case "Alerts & Settings":
$(this).addClass("AlertSettingIcon"); break;
case "Deposit a Check":
$(this).addClass("RDCIcon"); break;
default:
$(this).addClass("AlertSettingIcon");
}
});
另一种方法是将 HTML 映射到 class 名称...
var map = {
Accounts: "AccountIcon",
Transfers: "TransferIcon",
Messages: "MessageIcon",
"Alerts & Settings": "AlertSettingsIcon",
"Deposit a Check": "RDCIcon"
}
那么就...
$("li.menu-item a.ui-link").each(function() {
$(this).addClass(map[$(this).text()] || "AlertSettingIcon");
});
甚至更好...
$("li.menu-item a.ui-link").addClass(function() {
return map[$(this).text()] || "AlertSettingIcon";
});
我刚刚意识到我搞砸了原来的 HTML - 图标 classes 本来不应该出现在代码上的。现在我理解了否决票——以及 javascript 的普遍草率。我已经修改了 HTML,使其成为开始的样子。
我有一个无序列表,我正在使用 jQuery 搜索它以将 class 添加到其锚标记,具体取决于 [=46] 的 text/innerHtml =] 在列表项中:
<ul class="menu-items">
<li class="menu-item icon-globe">
<a href="/test/Mobile/Accounts.aspx" class="ui-link">Accounts</a></li>
<li class="menu-item icon-globe">
<a href="/dupont/Mobile/Transfers.aspx" class="ui-link">Transfers</a></li>
<li class="menu-item emailMenuItem icon-globe">
<a href="/test/Mobile/Messages.aspx" class="ui-link">Messages</a></li>
<li class="menu-item">
<a href="/test/CustomerService.aspx" class="ui-link">Alerts & Settings</a></li>
<li class="menu-item emailMenuItem icon-globe"><a href="/test/Mobile/DepositCheck.aspx" class="ui-link">Deposit a Check</a>
她是 jQuery 声明,应该将 "AlertSettingIcon" class 添加到警报和设置锚标记:
$("li.menu-item a.ui-link").each(function() {
if ($( this ).innerHtml == "Accounts") {
$(this).addClass("AccountIcon");
} else
if ($( this ).innerHtml == "Transfers") {
$(this).addClass("TransferIcon");
} else
if ($( this ).innerHtml == "Messages") {
$(this).addClass("MessageIcon");
} else
if ($( this ).innerHtml == "Alerts & Settings") {
$(this).addClass("AlertSettingIcon");
} else
if ($( this ).innerHtml() == "Deposit a Check") {
$(this).addClass("RDCIcon");
}
else {
$(this).addClass("AlertSettingIcon");
}
});
当我使用开发人员工具检查分配给每个锚标记的 classes 时,class 没有被添加。我试过使用 .text(),将我的脚本包装在 CDATA 标记中,.html(),使用 /u0026 和其他几种方法,但我还没有成功添加 class到 "Alerts & Settings" 锚元素。我还在 firefox 和 Chrome 中完成了这些方法中的每一个,以确保它不是浏览器兼容性。
最后,这里是一个 JSFiddle,问题本身就在这里:https://jsfiddle.net/r7vnft5c/
谁能弄清楚为什么 AlertSettingIcon class 没有在写入 JS/jQuery 时添加,我可以做些什么来解决它?
谢谢你的想法, 大卫
.innerHTML
不是一种方法。对于 jQuery,它是 $(this).html()
或对于原生 API,它将是 this.innerHTML
。
并使用更合理的流程控制结构,例如 switch
语句。
一般来说,.innerHTML
比较会比较敏感。当您只比较文本内容时,请改用 .text()
。
$("li.menu-item a.ui-link").each(function() {
switch ($(this).text()) {
case "Accounts":
$(this).addClass("AccountIcon"); break;
case "Transfers":
$(this).addClass("TransferIcon"); break;
case "Messages":
$(this).addClass("MessageIcon"); break;
case "Alerts & Settings":
$(this).addClass("AlertSettingIcon"); break;
case "Deposit a Check":
$(this).addClass("RDCIcon"); break;
default:
$(this).addClass("AlertSettingIcon");
}
});
另一种方法是将 HTML 映射到 class 名称...
var map = {
Accounts: "AccountIcon",
Transfers: "TransferIcon",
Messages: "MessageIcon",
"Alerts & Settings": "AlertSettingsIcon",
"Deposit a Check": "RDCIcon"
}
那么就...
$("li.menu-item a.ui-link").each(function() {
$(this).addClass(map[$(this).text()] || "AlertSettingIcon");
});
甚至更好...
$("li.menu-item a.ui-link").addClass(function() {
return map[$(this).text()] || "AlertSettingIcon";
});