Jquery选择器返回html元素

时间:2012-05-01 16:18:16

标签: jquery

我试图迭代一系列元素,试图找到一个特定元素并将一个类应用于该元素。问题在于,即使选择器返回一个对象集合,并且确实输入了应用该类的条件,但在查看源时,该类不会被应用。

这是功能:

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

2 个答案:

答案 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)会在每个

内提供