【发布时间】:2011-08-22 16:11:44
【问题描述】:
我想知道是否有一种方法可以复制 DOM 节点,这样既可以分割节点的文本部分,又可以保持该节点中包含的节点完好无损。我有一个函数,它需要一个段落,从中分离第一个字母,然后创建一个新节点,将包裹在一个新节点中的那个字母添加到它,然后插入其余的文本。问题是,当该段落包含其他 HTML 元素时,它们会被展平为字符串,因为我使用 innerHTML 提取文本。我需要它们保留 DOM 节点。函数如下:
function createDropCappedParagraph(article) {
pars = article.getElementsByTagName("p");
first_par = pars[0];
var text = first_par.innerHTML;
text = text.trim();
var first_letter = text.substr(0,1)
text = text.slice(1);
var t = document.createTextNode(text);
var dropcap = document.createElement("span");
dropcap.className = "dropcap";
dropcap.innerHTML = first_letter
var dcpar = document.createElement("p");
dcpar.style.position = "relative";
dcpar.appendChild(dropcap);
dcpar.appendChild(t);
article.insertBefore(dcpar, pars[0]);
article.removeChild(pars[1]);
}
这是应用此效果时的样子,请注意第一段中扁平化的 a href 链接:
http://legibilis.heroku.com/start-here
谢谢, 詹姆斯
【问题讨论】:
标签: javascript dom innerhtml