我有一個嵌套的導航列表(如下所示),其中每個鏈接指向最終構成整個頁面的頁面序列中的一個頁面。使用jQuery,我想在每個頁面上自動生成「prev/next」鏈接。這樣,用戶按順序閱讀所有文章,只需單擊jQuery生成的「Next」鏈接,而無需使用嵌套導航定位自己。分組嵌套元素
<ul id="sidemenu">
<li>Heading 1
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li class="navselected"><a href="#">Link 4</a></li>
</ul>
</li>
<li>Heading 2
<ul>
<li><a href="#">Link 5</a></li>
<li><a href="#">Link 6</a></li>
<li><a href="#">Link 7</a></li>
<li><a href="#">Link 8</a></li>
</ul>
</li>
</ul>
<div id="contentinner">
<p>The article content in here...</p>
</div>
在以前的嘗試,在得到這個使用下面的jQuery(的jsfiddle這裏:http://jsfiddle.net/LrHV8/)工作,我只能遍歷一個特定的嵌套<ul>
內的DOM,而不能向上移動,遍歷所有<a>
在#sidemenu
$(document).ready(function(){
var currNavItem = $('#sidemenu .navselected');
var nextNavItem = currNavItem.next('li');
var prevNavItem = currNavItem.prev('li');
var nextNavText = nextNavItem.find('a').text();
var prevNavText = prevNavItem.find('a').text();
var nextNavLink = nextNavItem.find('a').attr('href');
var prevNavLink = prevNavItem.find('a').attr('href');
var prevLinkTitle = "Previous Article";
if (prevNavText == ""){
prevLinkTitle = "";
}
var nextLinkTitle = "Next Article";
if (nextNavText == ""){
nextLinkTitle = "";
}
var nextPrevNav = '<div class="prevnext"><span class="prevarticle">'+prevLinkTitle+'<br /><a href="'+prevNavLink+'">'+prevNavText+'</a></span><span class="nextarticle">'+nextLinkTitle+'<br /><a href="'+nextNavLink+'">'+nextNavText+'</a></span></div>';
$('#contentinner').prepend(nextPrevNav);
$('#contentinner').append(nextPrevNav);
});
我怎麼組的所有#sidemenu a
在一個「平」的對象,找到.navselected
和提供的#sidemenu
方面作爲一個整體爲一個和下一個選項?
換句話說,如果(在這個例子中)Link 4
選擇我怎樣才能創建Prev = Link3/Next = Link 5
代替Prev = Link 3/Next = [BLANK]
編輯
感謝您的幫助,大衛Fregoli和j08691。在你的建議和jQuery的網站,我想出了這個解決方案,我認爲其中,閱讀後,從每個答案博採衆長位,同時仍然保持它的可讀性我相當經驗的眼睛:
$(document).ready(function(){
var $allItms = $('#sidemenu ul li'),
$currPos = $allItms.index($('.navselected')),
$prevTtl="",$prevLnk="",$prevTxt="",$nextTtl="",$nextLnk="",$nextTxt="";
if ($currPos > 0){
var $prevTtl = "Previous Article",
$prevAnc = $allItms.eq($currPos-1).find('a'),
$prevLnk = $prevAnc.attr('href'),
$prevTxt = $prevAnc.text();
}
if ($currPos < $allItms.length-1){
var $nextTtl = "Next Article",
$nextAnc = $allItms.eq($currPos+1).find('a'),
$nextLnk = $nextAnc.attr('href'),
$nextTxt = $nextAnc.text();
}
var $nextPrevNav = '<div class="prevnext"><span class="prevarticle">'+$prevTtl+'<br /><a href="'+$prevLnk+'">'+$prevTxt+'</a></span><span class="nextarticle">'+$nextTtl+'<br /><a href="'+$nextLnk+'">'+$nextTxt+'</a></span></div>';
$('#contentinner').prepend($nextPrevNav);
$('#contentinner').append($nextPrevNav);
});
,並不意味着它是一個好主意爲此使用jQuery。應該在服務器上生成下一個/上一個鏈接,並與組成頁面的HTML的其餘部分一起發送。 – Adam 2013-05-10 16:26:03
一個有效的觀點,亞當,但在這種情況下,由於一些與最初問題無關的因素,這並不是真的可行 - 但主要是因爲它是對現有靜態網站的改進。我對99%的訪問者啓用了JavaScript這一事實抱着平心靜氣的態度,所以實際上,這不是在這裏,也不在於是否完成了服務器端或客戶端。 – Doug 2013-05-10 17:26:34