2014-05-08 113 views
-4

我使用THIS樹,我發現在互聯網上(它不是我的),我最滿意它。 一個節點像這樣產生的:如何更改JQuery中的錨鏈接?

<li> 
    <span><i class="icon-leaf"></i> 
    Name 
    </span> 
    <a href="">Goes somewhere</a> 
</li> 

使用Javascript:

$(function() { 
    $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch'); 
    $('.tree li.parent_li > span').on('click', function (e) { 
     var children = $(this).parent('li.parent_li').find(' > ul > li'); 
     if (children.is(":visible")) { 
      children.hide('fast'); 
      $(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign'); 
     } else { 
      children.show('fast'); 
      $(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign'); 
     } 
     e.stopPropagation(); 
    }); 
}); 

每個節點都有一個圖標,名稱,和一個鏈接。當我點擊元素時,當前分支展開或摺疊。

我想改變它,以便該圖標可以展開/摺疊分支,名稱就是鏈接。最終的結果應該看起來像:
THIS

我是新來的HTML,CSS和JavaScript,我不知道我需要做的CSS/JavaScript來得到它什麼修改,誰能幫助我?

+1

樹重現問題的代碼應該在你的問題;而不是JS小提琴。 –

+0

我個人理解這個問題,並且有一個答案。 OP會希望這樣,而不是'i'元素+名稱擴展/摺疊樹,只有'i'元素和名稱可以鏈接。 – Djizeus

+0

@GeorgeStocker現在更好嗎? –

回答

2

您的嘗試不起作用,因爲點擊事件處理程序連接到整個span元素,該元素包含圖標和鏈接。

要使其工作,你必須使2次小修改的JavaScript代碼:使用這個選擇

  • 附上點擊處理程序的i元素(持有的圖標):.tree li.parent_li > span > i
  • 適應到$(this)引用來引用父span

所以整個JavaScript代碼將成爲:

$(function() { 
    $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch'); 
    $('.tree li.parent_li > span > i').on('click', function (e) { 
     var $this = $(this); 
     var $span = $this.parent(); 
     var children = $span.parent('li.parent_li').find(' > ul > li'); 
     if (children.is(":visible")) { 
      children.hide('fast'); 
      $span.attr('title', 'Expand this branch'); 
      $this.addClass('icon-plus-sign').removeClass('icon-minus-sign'); 
     } else { 
      children.show('fast'); 
      $span.attr('title', 'Collapse this branch') 
      $this.addClass('icon-minus-sign').removeClass('icon-plus-sign'); 
     } 
     e.stopPropagation(); 
    }); 
}); 

$('.icon-plus-sign').parent().next().next().children('li').hide(); 
+0

謝謝,但這會產生另一個問題:當我展開/摺疊它們時,具有圖標加號和圖標減號的節點不再更改它們的圖標。你能幫我解決嗎? –

+0

好點。但你有沒有試過理解代碼?原因與爲什麼需要調用「parent()」的原因相同。更新了我的答案。 – Djizeus

+0

我已經嘗試過了,但是我沒有使用JavaScript的經驗,現在對我來說很多標記看起來像是火箭科學。謝謝,我會接受你的回答 –