我收到了各种格式的超文本标记语言,我正在尝试使用jQuery来标准化代码。在某些情况下,我使用breaks <br>分隔行来接收它。我需要这些是<div> (或<p>)标签。例如,下面的代码:
a<br>b<br>c需要转换为
<div>a</div><div>b</div><div>c</div>这是一个简单的例子,因为a中的内容可能被各种类型的<font>、<span>和其他格式选项包围,所有这些都需要保留。
这是我的第一次尝试。它查找整个文档中的所有<br>标记,然后访问父文档的内容以获取<br>周围的所有HTML。如果内容长度为1,则<br>是其中唯一的元素(即空白行),因此跳到下一个元素。否则,查看每个元素,用<div> (或<p>)将其括起来,然后删除不再需要的<br>。变量wrapper可以是"<div />",也可以是"<p />",具体取决于浏览器。
$("br").each(function() {
// Find all the br tags' parent nodes
var elements = $(this).parent().contents();
if (elements.length > 1) {
// If there is one element than it is br so skip on.
elements.each(function() {
// Loop through each child element of the parent
var nodeName = this.nodeName.toLowerCase();
if (nodeName !== 'div' && nodeName !== 'p') {
// Make sure each child that is not <br> is wrapped. Remove <br> tags.
if (nodeName == 'br') {
$(this).remove();
} else {
$(this).wrap(wrapper);
}
}
});
}
});但是,这并不起作用,因为它在每个子元素周围添加了<div> (或<p>)标记,所以像<font>a</font>bc<br>de<b>f</b>这样的东西最终会变成这样
<div><font>a</font></div>
<div>bc</div>
<div>de</div>
<div><b>f</b></div>当它真正需要的时候
<div><font>a</font>bc</div>
<div>de<b>f</b></div>(为了更容易阅读,我把它拆开了。)
如果我在文本解析器中这样做,我会像上面对变量elements所做的那样查找内容,在开头添加一个<div>,在末尾添加一个</div>,然后用</div><div>替换每个<br> (除非它已经是<div><br></div>,这时我会跳过它)。我不知道如何在jQuery/Javascript中做到这一点。但是,特别是关于用</div><div>替换<br>部分。(第一部分是elements.wrap(wrapper)。)
任何关于此方法或替代方法的帮助都将不胜感激。
-更新
@Ian提供了运行正常的代码的必备部分。我稍微扩展了一下,我想我应该把它包括在这里。我已经在FF,Safari,Chrome和IE 9+上测试过了。
$("br").each(function(idx, el) {
var $el = $(el),
$parent = $el.parent(),
$contents = $parent.contents(),
$cur, $set, i;
$set = $();
if ($contents.length > 1) {
for (i = 0; i < $contents.length; i++) {
$cur = $contents.eq(i);
if ($cur.is("br")) {
$set.wrapAll(wrapper);
$cur.remove();
$set = $();
} else {
$set = $set.add($cur);
}
}
$set.wrapAll(wrapper);
}
});发布于 2013-08-29 01:31:17
我的建议是按<br>拆分文本:
var lines = content.split("<br>");现在您可以将每一行包装在一个<div>中
var newContent = "";
for(var i=0,l=lines.length;i<l;i++){
newContent += "<div>"+lines[i]+"</div>";
}https://stackoverflow.com/questions/18494385
复制相似问题