2013-06-19 56 views

回答

3

好的,讓我們現在就完成一些嚴肅的代碼吧。

我要盡力讓這個動態!

$letter = '' 
$("//p[not(contains(@class,'starts-with'))][1]") { 
    # get the first p that doesn't have the class 
    $add_header = "false" 
    text() { 
    capture(/\A(\w)/) { 
     # get the first letter and set it to a variable 
     match($letter) { 
     with($1) { 
      #do nothing 
     } 
     else() { 
      $letter = $1 
      $add_header = "true" 
     } 
     } 
    } 
    } 
    match($add_header) { 
    with(/true/) { 
     insert_before("h1", "Starts With: "+$letter) 
     $("self::*|following-sibling::p[contains(text(), '"+$letter+"')]") { 
     add_class("starts-with-" + $letter) 
     } 
    } 
    } 
} 
+1

我唯一要改變的地方就是使用「capture」而不是「replace」,因爲你實際上並沒有取代任何東西。 – noj

+0

@noj謝謝!我總是忘記功能存在! –

+0

已添加。^_ ^乾杯! –

0

給這個鏡頭。它可以在任何列表上工作,即使這些元素沒有按首字母進行分組。

$add_header = "true" 
text() { 
    replace(/^(.)/) { 
    $first_letter = $1 
    } 
} 

# If the header section already exists, move this element inside 
move_to("preceding-sibling::div[@class='starts-with-"+$first_letter+"']") { 
    $add_header = "false" 
} 

# If the header section doesn't exist, wrap the element 
match($add_header, /true/) { 
    wrap("div") { 
    add_class("starts-with-" + $1) 
    } 
} 

將它包裝到一個函數中將是非常微不足道的。在此之後,下一個要編寫的邏輯函數將是字母順序,以及使用$ first_letter匹配找到的字母的大寫和小寫版本。