2014-02-13 106 views
2

我希望我的JQuery根據我在—上的頁面選擇導航鏈接—之一,然後我希望它將它移動到列表頂部。JQuery無法重新排列列表中的元素;怎麼修?

這是我的導航欄的HTML:

<nav> 
    <ul id=nav> 
     <li><a href="index.php">Home</a></li> 
     <li><a href="skillsets.php">Skillsets</a></li> 
     <li><a href="gallery.php"><icon>Gallery</a></li> 
     <li><a href="about.php">About</a></li> 
     <li><a href="contact.php">Contact</a></li> 
    </ul> 
</nav> 

這是我使用的嘗試和重新排序列表中的JQuery:

var page = document.location.pathname.match(/[^\/]+$/)[0]; 
var ul = $('nav').children('ul'), 
    li = ul.children('li'); 
$(document).ready(function(){ 
    ul.prepend($('a[href*='+page+']').parent()); 
}); 

不用說,這是不加工。

順便說alert(page);

輸出,我是上,EI頁的文件的名稱: 「contact.php」,但alert($('a[href*=page]').parent());

只是輸出「[對象的對象]

。有任何想法嗎?謝謝!

+0

您應該使用console.log(obj)打印對象。你也可以參考這篇文章http://stackoverflow.com/questions/957537/how-can-i-print-a-javascript-object – Rads

回答

2

有幾個錯誤在你的代碼:

  1. ulundefined,則應使用$('ul')$('#nav')選擇元素。
  2. 您尚未關閉文檔就緒處理程序。缺少)
  3. 你沒有在連接字符串,即$('a[href*='+page+']').parent()

還進行調試,你應該使用console對象和log()值,alert試圖展示一個值的字符串表示,它輸出[object Object]toString()上述對象的方法返回這個值。 console.log(anIdentifier).

更新:

請注意,您選擇的元素之前,DOM是準備好了,所以當你試圖選擇元素作爲DOM還沒有準備好,ul可以是一個空的集合。您應該選擇文檔就緒處理程序中的元素。

$(document).ready(function(){ 
    var ul = $('#nav'), li = ul.children('li'); 

    ul.prepend($('a[href*=page]').parent()); 
}); 
+0

感謝您的調試!順便說一下,我的實際代碼並不缺少'';我只是忘了複製並粘貼它。雖然我想知道是否可以通過這樣做來使'ul'的定義更加有限:'ul = $ ('nav')。children('ul'),' – LarryK

+0

@LarryK是的,你可以這樣做,因爲你不重新創建對象(_caching_),如果元素有ID,使用ID選擇器更好高效的$('#nav')'。 – undefined

+0

@wared那麼,當我提出了答案(在update_之前),'ul'是'undefined'。更新使第一項和第二項失效。 – undefined

0

首先你需要用給定的URL找到li然後調用前置

$(document).ready(function() { 
    var page = document.location.pathname.match(/[^\/]+$/)[0]; 
    $('#nav a[href="' + page + '"]').parent().prependTo('#nav'); 
}) 

演示:Fiddle

0
  1. 你需要將其更改爲$('ul')得到UI元素
  2. $('a[href*=page]')應該$('a[href*="'+page+'"]')

所以它看起來像:

var page = document.location.pathname.match(/[^\/]+$/)[0]; 
$(document).ready(function(){ 
    $('ul').prepend($('a[href*="'+page+'"]').parent()); 
}); 

**對於調試時,您可以使用console.log()並在瀏覽器中檢查缺點而不是使用alert(),它可以爲您提供更多信息。