我正在克隆一个实时降价编辑器dillinger.io,但与在 dillinger 中不同的是,当您在文档中嵌入视频时,但我不希望视频在每次更新文档时刷新和闪烁,这很常见。
DOM 的组织方式如下。
<div id='editor'></div>
<div id="viewer">
<h2>title</h2>
<iframe width="560" height="315"
src="http://www.youtube.com/embed/9bZkp7q19f0" frameborder="0" allowfullscreen>
</iframe> <!-- Gangnam style youtube embed-->
<p>What a dull video</p>
</div>
本例中的编辑器是出色的Ace 编辑器,它允许我通过editor.getValue()
有没有一种简单的方法可以做到这一点?我用谷歌搜索过,没有发现任何有用的东西。
这就是我目前所拥有的
function update(){
var mk = editor.getValue();
var updatedHtml = converter.makeHtml(mk);
$('#viewer').html(updatedHtml);
}
editor.getSession().on('change', function(e) {
update();
});
但我想把它改成这样
function update(){
var before = $('#viewer').html();
var mk = editor.getValue();
var updateHtml = converter.makeHtml(mk);
$('#viewer').replaceWhereDifferent(updateHtml, before);
}
这样做是在每次更新发生时阻止嵌入的 youtube 视频闪烁。
问题是我没有一个很好的函数形式
replaceWhereDifferent(updateHtml, before)
一些示例 html 字符串将是
<div id="viewer">
<h2>title</h2>
<iframe width="560" height="315"
src="http://www.youtube.com/embed/9bZkp7q19f0" frameborder="0" allowfullscreen>
</iframe> <!-- Gangnam style youtube embed-->
<p>comment</p>
</div>
现在说用户将 p 评论更改为
<p>OMG thats the best video ever</p>
我希望在不刷新视频的情况下进行更新
所有这些都是由降价转换器从Ace 编辑器获取代码生成的代码。所以所有的降价都是一起转换的,我无法区分或标记降价的不同部分。我得到的只是更新的 html 字符串