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内の html 要素になりeachます。jQuery オブジェクトが必要な場合は、次のようになります。

$(item)それぞれの中にそれを与えます

于 2012-05-01T16:22:38.680 に答える