2012-05-01 166 views
1

我想通過元素集合,試圖找到一個特定的元素,並將類應用到該元素。問題是,即使選擇器返回一個對象集合,並且輸入了應用該類的條件,但在查看源代碼時該類不適用。Jquery選擇器返回html元素

這是函數:

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> 

當我嘗試做$(項目).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)}" 
+1

你可以張貼標記過? – mattytommo

+1

順便提一下,'navitems'已經是一個jQuery對象,你不需要再次創建'$(navitems)'。 – VisioN

+0

@mattytommo我加了標記。 –

回答

2

內按照你的JavaScript代碼和HTML標記,這個問題似乎是在這一行:

var parent = $(item).parent('.topnav-item'); 

選擇器.topnav-item應選擇類名爲topnav-item的父節點。但是,每個a項目的父項目是td,它沒有此類。

所以,如果你需要添加topnavselectedtable節點,那麼你可以使用這個:

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'); 
     } 
    }); 
}​ 
+0

我給了一個鏡頭,然而當這條線運行「$(item).addClass('topnavselected');」該類仍然不會被添加到HTML中的該元素。 –

+0

@JohnS,請從答案的更新版本中嘗試'HighlightNav()'方法。如果'webUrl.match(...)'條件正常工作,則應該添加類。 – VisioN

+0

@JohnS,請在你的問題下閱讀我最後的評論。 – VisioN

1

item將是each裏面的html元素。如果你想要一個jQuery對象,它看起來像你這樣做:

$(item)會給你的每一個

+0

林不知道我關注。我應該用item = $(this)替換item = this嗎? –

+0

是的,這將工作得很好。 –