将 DOM 元素替换为仅开始标记(或结束标记)
Replace DOM Element with Opening Tag Only (or Closing Tag)
我使用Blogger作为我的博客平台。令人讨厌的是,在富文本编辑器中按回车键会创建
(换行符)标签,而不是
标签替换为一个开始的
标签,
将每个奇数
替换为一个结束的
<br /> (replace with <p>)
Some initial paragraph
<br /> (replace with </p>)
<br /> (replace with <p>)
Some second paragraph
<br /> (replace with </p>)
<br /> (replace with <p>)
Some third paragraph
<br /> (replace with </p>)
为此,我编写了下面的jQuery。
$("br").each(function(i){
if (i % 2 === 0){
$(this).replaceWith("<p>");
} else {
console.log("odd break");
$(this).replaceWith("</p>");
}
})
但是,我没有得到上面的结果,而是发现每个
标签都被替换为开始和结束标签
关于我如何做到这一点的任何建议?
谢谢!
(请不要建议我切换到另一个真正做我想要的博客平台。我不想这样做,它实际上也没有回答我的问题。
您只能将完整节点附加到 dom。一种解决方案是将文本节点包装在<p>
元素中并删除<br>
:
http://jsfiddle.net/MYFQV/
$('#content').contents().filter(function() {
return this.nodeType == 3 && $.trim($(this).text()).length > 0;
}).wrap('<p/>');
$('#content br').remove();
var s = $('#content').html();
var i = -1;
s = s.replace(/<br '/>/gi, function() {
i++;
return i % 2 == 0 ? '</p>' : '<p>';
}, 'gi');
$('#content').html(s);
这会将 HTML 作为文本读取,使用正则表达式将<br />
的每个实例替换为正确的开始或结束标记,然后将 HTML 字符串写回页面。
你在 HTML 标签汤和 DOM 之间混淆了。
当在浏览器中访问页面时,它(浏览器)解析HTML代码(标签)并创建DOM元素。它不会太关心HTML的有效性,例如:
<div id="parent>
<p>
One paragraph
<div>Split</div>
Another paragraph
</p>
</div>
将变成一棵树,有一个父母和三个孩子,就像这样:
#parent
p > text(One Paragraph)
div > text(Split)
text(Another paragraph)
相反,您可以做的是提取br
标签之间的文本并将其放置在段落中。
相关文章:
- 希望日期开始结束于while循环中的一个房间id的一个数组
- 处理第三方库发送的ajax请求的开始和结束事件
- 从工作日结束到下一个工作日开始的完整日历JS包装时间
- 使用javascript&自定义验证器检查开始日期和结束日期
- 如何在上一个动画结束后开始动画
- 如何在dhtmlxgantt中显示灯箱中的开始日期、结束日期和持续时间
- 如何在javascript中获得给定的月份开始日期和结束日期
- 在选择开始日期后设置结束日期
- 基础日期选择器、结束日期(和时间)不能早于开始日期(和时间)
- 在JavaScript中搜索文本并获取其所有开始和结束索引
- 结束日期作为基础日期时间选择器中的选定开始日期
- 检测事件回调的开始和结束
- 从 ngDialog 模式修改完整日历事件信息(开始和结束)
- 开始日期和结束日期输入字段的 JQuery 筛选器表
- 在ExtJS中获取开始/结束日期之间的日期
- 根据DOM,HTML元素的开始和结束标记之间的内容被称为属性.这个房产的名字是什么
- 如何在Dynamics CRM中获取时区的夏令时开始和结束时间
- Regexp表示不允许在结束/开始处使用特殊字符,但应该允许空格
- Spotify JavaScript API歌曲结束/开始事件与新的API
- 完整日历-结束/开始事件的日期格式