我试图迭代一系列元素,试图找到一个特定元素并将一个类应用于该元素。问题在于,即使选择器返回一个对象集合,并且确实输入了应用该类的条件,但在查看源时,该类不会被应用。
这是功能:
function HighlightNav() {
$('.quick-launch-nav').css('visibility', 'visible');
var navitems = $('a.topnav-item[href]');
$(navitems).each(function () {
var item = this;
var linkUrl = item.href;
var webUrl = IPC_siteUrl + IPC_webUrl;
if (webUrl.match('^' + linkUrl)) {
$(item).addClass('topnavselected');
var parent = $(item).parent('.topnav-item');
$(parent).addClass('topnavselected');
}
});
}
当我尝试通过查看内部html来调试它时,它会返回一个javascript函数,而不是我所期望的。
我在这里做错了吗?
这是标记。仅供参考,它的SharePoint非常丑陋。
<td onmouseover="Menu_HoverStatic(this)" onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(this)" id="zz1_TopNavigationMenun0">
<table class="topnav-item zz1_TopNavigationMenu_4" cellpadding="0" cellspacing="0" border="0" width="100%">
<tr>
<td style="white-space:nowrap;">
<a class="zz1_TopNavigationMenu_1 topnav-item zz1_TopNavigationMenu_3"
href="http://webapp/en/about"
accesskey="1" style="border-style:none;font-size:1em;">About</a>
</td>
</tr>
</table>
</td>
当我尝试做$(item).html.toString()时,这就是我得到的:
function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)}"
答案 0 :(得分:2)
遵循您的JavaScript代码和HTML标记,问题似乎就在这一行:
var parent = $(item).parent('.topnav-item');
选择器.topnav-item
应该选择类名为topnav-item
的父节点。但是,每个a
项的父项都是td
,没有此类。
因此,如果您需要将topnavselected
类添加到table
节点,那么您可以使用它:
var parent = $(item).parentsUntil('.topnav-item').parent();
因此,最终代码应如下所示:
function HighlightNav() {
$('.quick-launch-nav').css('visibility', 'visible');
$('a.topnav-item[href]').each(function() {
var item = $(this);
var linkUrl = this.href;
var webUrl = IPC_siteUrl + IPC_webUrl;
if (webUrl.match('^' + linkUrl)) {
item.addClass('topnavselected');
var parent = item.parentsUntil('.topnav-item').parent();
parent.addClass('topnavselected');
}
});
}
答案 1 :(得分:1)
item
将成为each
内的html元素。如果你想要一个jQuery对象,你看起来像这样:
$(item)
会在每个