Jquery – 用值替换字符串中的选定html标记
我正在研究一个tinymce插件,我需要将一些html转换为短代码。
我有一个字符串与html看起来像这样:
var content = 'Content 1
Content 2
Content between rows
Content 3
Content 4
';
并希望将带有类行的div“转换”为[row] Content [/ row],并将class列与[col] Content [/ col]进行div。 所以每行输出都是这样的:
[row] [col]Content[/col] [col]Content[/col] [/row]
所以我替换后的最后一个字符串看起来像这样:
'[row][col]Content 1
[/col][col]Content 2
[/col][/row]Content between rows
[row][col]Content 3
[/col][col]Content 4
[/col][/row]'
我准备了一个jsfiddle ,但不知道从哪里开始用短代码标签替换html标签。
我希望有些jquery / javascript天才想分享他们对如何解决这个问题的看法:)
这是一个jquery解决方案,因为jquery节省了几行而不是使用纯javascript编写。
基本上我们会
-
创建一个空的div元素,并将你的html放入这个div。 这允许我使用jquery提供的DOM遍历和操作api。
-
对所有.columns和.rows执行搜索和更新。
我在Codepen上做了一个简单的运行示例。 你可以玩它 。
HTML:
JS:
$(document).ready(function(){ var content = 'Content 1
Content 2
Content between rows
Content 3
Content 4
'; var $dataWrapper = $(""); $dataWrapper.html(content); //wrap up the data to convert in a div. //for each column in container element $dataWrapper.find('.columns').each(function(){ var htmlInsideColumn = $(this).html(); var convertedHtml = "[col]" + htmlInsideColumn + "[/col]"; $(this).after(convertedHtml); //let's place the converted html right after this column element. $(this).detach(); //remove this element. }); //for each row in container element $dataWrapper.find('.row').each(function(){ var htmlInsideColumn = $(this).html(); var convertedHtml = "[row]" + htmlInsideColumn + "[/row]"; $(this).after(convertedHtml); //let's place the converted html right after this row element. $(this).detach(); //remove this element. }); $("#output").text($dataWrapper.html()); });