innerHtml()中的Ampersand未正确读取并在JS中进行验证
Ampersand in innerHtml() not being read correctly and validating in JS
我刚刚意识到我把原来的HTML搞砸了——图标类本来就不应该出现在代码中。现在我理解了否决权,以及javascript的一般草率。我已经修改了HTML,使它成为一开始应该有的样子。
我有一个无序的列表,我正在用jQuery搜索它,以将一个类添加到它的锚标记中,这取决于列表项中链接的text/inerHtml:
<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"类添加到Alerts&设置锚点标签:
$("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和其他一些方法,但我还没有成功地将该类添加到"Alerts&Settings"锚元素中。我还在firefox和Chrome中完成了每一种方法,以确保它与浏览器不兼容。
最后,这里有一个JSFiddle,其中显示了问题:https://jsfiddle.net/r7vnft5c/
有人能理解为什么在编写JS/jQuery时没有添加AlertSettingIcon类,以及我能做些什么来修复它吗?
谢谢你的想法,David
.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映射到类名。。。
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";
});
相关文章:
- JS验证ajax返回的html中的表单数据
- 页面上的2个表单带有JS验证-其中一个抛出电子邮件验证错误
- validate.js验证数组元素
- sinon.js验证mock方法's带回调的参数
- 如何使用angular js验证ionic中的表单
- 表单元素值更改后的角度 JS 验证
- JS验证后空联系表单
- 使用parsley.js验证动态创建的字段
- 使用Angular.js验证表单输入的原始状态
- Angular.js验证消息未显示
- Magento-全局添加额外的js验证规则
- 如何使用angular js验证器执行下拉控件验证
- 使用javascript gen_validatorv4.js验证表单字段
- 当 openssl 命令行验证签名时,节点.js验证函数不会验证签名
- JS验证在正常速度下失败,但在单步执行代码时有效
- 欧芹.js验证未触发
- JS验证错误,表单仍在提交
- Angular Js:验证表中的重复对象键
- 使用角度 js 验证电话号码
- Yii2 - i18n 表示 js 验证消息中的 {属性}