好的,我在jsfilddle http://jsfiddle.net/U67hC/上拥有所有内容
我的问题是<ins>
和</ins>
被添加到环绕文本中,应该是HTML,但显示为纯文本。仅在通过parseHTML
创建对象之后添加。如果我在解析之前将其添加到文本中,则显示为良好的html。如何将其添加到文本周围,然后将其识别为HTML?
::编辑::
我有一个项目要添加到此处,作为原始问题的分支,该系统目前在下面的集合中运行,但是如果在test31之后添加任何文本,则需要将其断开并将该文本推到单独的节点中。有没有一种方法可以让循环中的其余文本并中断循环,同时在其中创建新的ins节点之后通过允许函数循环继续然后点击下一个集合来创建新的文本节点给父节点,文字?
就像是
遍历文本
查找要突出显示的文本(创建新节点并在当前文本节点之后分配
检索循环中剩余的文本
在ins节点之后将其余文本推入新的文本节点
函数获取此新文本obj并运行它
::结束编辑::
代码如下:
$(function () {
var array = [];
var count = 0;
step_through_array($.parseHTML('<div>test1<strong><img src="">test2 test32</strong>test3<p>test4</p></div><p><ins>test5</ins></p>'));
var obj = $.parseHTML('<div>test1<strong>test2 test31</strong>test3<p>test4</p></div><p><ins>test5</ins></p>');
step_through(obj);
$('#content').html(obj);
function step_through(obj) {
$.each(obj, function () {
if (this.childNodes.length != 0) {
step_through(this.childNodes);
} else if (this.nodeName == '#text') {
var data_set = '';
$.each(this.data.split(' '), function (name, value) {
if (array[count] == value) {
data_set += value + ' ';
} else {
/*tags added here*/
var new_obj = document.createElement('ins');
new_obj.appendChild(document.createTextNode(value));
$(curr_obj).after(new_obj);
}
count++;
});
this.data = data_set;
}
});
}
function step_through_array(obj) {
$.each(obj, function () {
if (this.childNodes.length != 0) {
step_through_array(this.childNodes);
} else if (this.nodeName == '#text') {
$.each(this.data.split(' '), function (name, value) {
array.push(value);
});
}
});
}
});
最佳答案
文本节点仅包含文本。
如果要在文本节点的中间插入HTML元素,则必须:
从第一个文本节点删除文本的后半部分
处理新元素
用document.createElement
创建它
使用document.createTextNode
创建一个文本节点及其内容
将新的文本节点追加到元素节点
将元素节点附加到原始文本节点旁边
创建一个新的文本节点(其中包含已删除的文本)并将其附加到新元素节点旁边
关于javascript - 如何将html标签放入文本节点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22753214/