如何使用jquery创建一个简单的prettyprint <pre>

Jam*_*yle 7 javascript jquery pretty-print pre

http://jsfiddle.net/JamesKyle/L4b8b/

我试图用jQuery创建一个非常简单的prettyprint函数,但我不知道如何查找元素,属性和值(显示在jsfiddle中).

我想完成以下事项:

  1. 包裹元素 <span class="element" />
  2. 用于换行属性 <span class="attribute" />
  3. 用值换行值 <span class="value" />
  4. 替换<&lt
  5. 替换>&gt

这是我当前的jQuery:

$(document).ready(function() {

    $('pre.prettyprint').each(function() {

        $(this).css('whitespace','pre-line');
        /* Why isnt ^this^ working? */

        var code = $(this).html();

        // How should I define the following

        var element = $(code).find(/* ELEMENTS */);
        var attribute = $(code).find(/* ATTRIBUTES */);
        var value = $(code).find(/* Values */);

        $(element).wrap('<span class="element" />');
        $(attribute).wrap('<span class="attribute" />');
        $(value).wrap('<span class="value" />');

        $(code).find('<').replaceWith('&lt');
        $(code).find('>').replaceWith('&gt');
    });
});
Run Code Online (Sandbox Code Playgroud)

哪个试图格式化:

<pre class="prettyprint">
    <a href="http://website.com">Visit Website</a>
    <a href="#top">Back to Top</a>
</pre> 
Run Code Online (Sandbox Code Playgroud)

进入这个:

<pre class="prettyprint">
    <span class="element">a <span class="attribute">href</span>=<span class="value">”http://website.com”</span></span>Visit Website<span class="element">/a</span>
    <br/>
    <span class="element">a <span class="attribute">href</span>=<span class="value">”#top”</span></span>Back to Top<span class="element">/a</span>
</pre>
Run Code Online (Sandbox Code Playgroud)

提前谢谢你!

你可以在这里看到jsfiddle:http: //jsfiddle.net/JamesKyle/L4b8b/

Sin*_*eta 2

真正的魔力在于处理任意属性的标签。这是简单的“锚”版本:jsFiddle

$('pre.prettyprint').each(function() {
    $('a').each(function(){
        $anchor = $(this);
        html = '<span class="element">&lt;a ';
        html += '<span class="attribute">href</span>=<span class="value">"' + $anchor.attr('href') + '"&gt;</span>';
        html += '</span>' + $anchor.text() + '<span class="element">&lt;/a&gt;</span>'
        $anchor.replaceWith(html);
    });
});
Run Code Online (Sandbox Code Playgroud)