javascript - 字符串到 DOM 到字符串

标签 javascript jquery string dom

我从数据库中获取一些 Markdown 文本。我正在使用 Showdown.js 将此 Markdown 转换为 HTML:

var showdown = new Showdown.converter();
var str = showdown.makeHtml(myDatabaseString);

当 markdown 中嵌入代码时,Showdown.js 会将其很好地包装到 <pre><code> 中标签,所以str可能看起来像这样:

<p>Some text bla</p><pre><code>Some code</pre></code><p>Text again</p>

现在我想通过使用 SyntaxHighlighter 语法突出显示代码片段来使事情变得更漂亮。重要的是,最终我会返回一个包含之前所有内容的字符串,以及用于格式化的附加 HTML。

我的方法是利用 JQuery 操作 DOM 的能力:

$(str).each(function() {
    // or can I select only pre within $(str) directly?
    // everything I tried so far to do that failed miserably
    if($(this).is('pre')) {
        var code = $('code', $(this)).text();
        // brush is my SyntaxHighlighter brush that I created earlier
        $('code', $(this)).text(brush.getHtml(code));
        // when I console.log($('code', $(this))) now, everything worked
        // out perfectly
    }
});
// but now I lost all my changes for some reason :-(

return str; // I need to return this as a string again

我走的路对吗?如何保留我在 .each 内所做的更改循环?

最佳答案

这是因为您正在创建一个与 str 变量无关的 jQuery 对象,您应该使用创建的 jQuery 对象。事实上,您正在修改创建的 jQuery 对象的元素并返回原始/未更改的 str 变量。我建议:

// Creating a wrapper element 
// and setting it's content by using str variable
var $wrapper = $('<div/>').html(str);

// Modifying descendant pre elements
$wrapper.find('pre').each(function(){
   // implementing the logic
});

// Getting modified HTML content of the created wrapper element
str = $wrapper.html();

关于javascript - 字符串到 DOM 到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18418576/

相关文章:

javascript - 关于 JavaScript 语法的问题

jquery - 如何在查询 slider 中添加指向图像的超链接

javascript - 无法使用 jQuery 触发 Knockout 数据绑定(bind)

php - PHP 中数字值和字符串值的区别

swift - 如何在 Swift 4 中增加 Index.String 类型的变量?

javascript - AngularJS:检索存储在 $templateCache 中的 Videogular 模板结果 404 错误

javascript - 如何在javascript中对日期数组进行排序

ios - 如何以字符串格式添加百分号?

javascript - Videojs HLS Live 长时间播放内存问题

javascript - 单击时移动图像