【发布时间】:2015-05-21 10:53:15
【问题描述】:
我刚刚意识到我搞砸了原来的 HTML - 图标类原本不应该出现在代码中。现在我理解了投票的反对 - 以及 javascript 的一般草率。我已经修改了 HTML,使其成为应有的开始。
我有一个无序列表,我正在使用 jQuery 搜索它以向其锚标记添加一个类,具体取决于列表项中链接的文本/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>
她是应该将“AlertSettingIcon”类添加到警报和设置锚标记的 jQuery 语句:
$("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");
}
});
当我使用开发人员工具检查分配给每个锚标记的类时,没有添加该类。我尝试使用 .text(),将脚本包装在 CDATA 标记中,.html(),使用 /u0026 和其他几种方法,但我还没有成功地将类添加到“警报和设置”锚点元素。我还在 firefox 和 Chrome 中完成了这些方法,以确保它与浏览器不兼容。
最后,这是一个 JSFiddle,问题出现在该处:https://jsfiddle.net/r7vnft5c/
谁能弄清楚为什么在编写 JS/jQuery 时没有添加 AlertSettingIcon 类,以及我可以做些什么来修复它?
感谢您的想法, 大卫
【问题讨论】:
-
在代码中的 if/else 语句中使用 innerHTML 是一种不好的做法。另外,我不认为 'innerHtml()' 是正确的语法。
-
确实,innerHTML 是一个字符串,而不是一个函数。除掉 ()。但是你永远不应该将某些东西与 innerHTML 进行比较,因为不同的浏览器可以在元素之间添加或删除空格以“美化”代码,因此 innerHTML 的值是不可预测的。
-
@opznhaarlems,如果您投了反对票,我很想知道为什么 innerHtml 在 if/then 中是不好的做法 - 以及修复方法是什么。 innerHtml() 在 5 个元素中的 4 个中完美运行,当使用 firebug 尝试识别 JS 从警报和设置链接的文本中读取的值时,它显示 innerHtml 给出了“警报和设置”的版本”,这似乎是使用“警报和设置”的更好选择,JS 可能会错误地读取它(至少从我读过的多个其他线程尝试解决这个问题。
-
感谢@JacqueGoupil 的澄清
-
@David 我必须说,我不确定你为什么要这样做,这段代码的用例到底是什么?在我看来,这是一段奇怪的代码,如果我知道它的用途,我可能会向您展示一种更好的方法。
标签: javascript jquery string ampersand