2012-09-20 68 views
2

我想轉換嵌套的HTML設置高亮報價標籤

<div class="bbQuote"> 
    <div class="quoteAuthor">Joe Block</div> 
    <div class="quoteContent">This is the first message<br> 
     <div class="bbQuote"> 
      <div class="quoteAuthor">Jane Doe</div> 
      <div class="quoteContent">This is the second message</div> 
     </div> 
    </div> 
</div> 

轉換下面的HTML到以下bbcode

[quote=Joe Block] 
    This is the first message 
    [quote=Jane Doe] 
     This is the second message 
    [/quote] 
[/quote] 

我怎樣才能做到這一點使用jQuery?

PS:嵌套HTML可以有零個或更多的孩子

+0

HTML是在頁面還是字符串?在我認爲的頁面中? –

+0

HTML使用'jQuery('#commentContent')。html()'解析,因此它可以是html或文本。 – Optimus

+2

我做了一個你想要的東西 - [小提琴](http://jsfiddle.net/ult_combo/tE77x/)的原始示例,但它不會轉換其他bbCode標籤([b],[i],定位標籤等等),2.縮進不相同。我會使用ajax從數據庫中獲取實際的發佈內容或使用合適的jQuery bbCode解析庫。 –

回答

1

這裏是一個非常簡單的例子:

var html = $('#commentContent').html(), 
    beingParsed = $('<div>' + html.replace(/<br>/g, '\n\r') + '</div>'), 
    $quote; 
while (($quote = beingParsed.find('.bbQuote:first')).length) { 
    var $author = $quote.find('.quoteAuthor:first'), 
     $content = $quote.find('.quoteContent:first'), 
     toIndent = $author[0].previousSibling; 

    toIndent.textContent = toIndent.textContent.substring(0, toIndent.textContent.length-4); 
    $author.replaceWith('[quote=' + $author.text() + ']'); 
    $content.replaceWith($content.html()); 
    $quote.replaceWith($quote.html() + '[/quote]'); 
} 

var parsedData = beingParsed.html(); 

Fiddle

限制:

  1. 它不會將其他HTML轉換爲BBCode(<b><i>,錨標籤等);
  2. 縮進/空格不是100%準確。

我會使用Ajax從數據庫中獲取實際的發佈內容或使用合適的jQuery bbCode解析庫。