1

我正在尝试遍历元素集合,尝试定位特定元素并将类应用于该元素。问题是,即使选择器返回一个对象集合,并且确实输入了应用该类的条件,但在查看源时该类并未应用。

这是功能:

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)}"
4

2 回答 2

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');
        }
    });
}​
于 2012-05-01T16:34:53.227 回答
1

item将是each. 如果你想要一个 jQuery 对象,它看起来像你做的那样:

$(item)会给你每个里面的

于 2012-05-01T16:22:38.680 回答