我尝试查找和替换文本(使用jQuery).实际上我正在尝试在文本周围添加span元素.我也应该能够再次移除跨度而不会丢失内部文本.
例如,假设我有以下情况开始:
<span>This is a span element</span>
Run Code Online (Sandbox Code Playgroud)
我希望能够使用jQuery/JavaScript动态执行此操作:
<span>This is a <span class="marked">span</span> element</span>
Run Code Online (Sandbox Code Playgroud)
我也应该能够删除span.marked并返回第一个结果.
但问题是我想在具有多个子节点和子节点的容器内的所有文本上执行此操作,依此类推.
到目前为止我得到的代码将执行以下操作,这不是我想要的:
<<span class="marked">span</span>>This is a <span class="marked">span</<span class="marked">span</span> element</span>
Run Code Online (Sandbox Code Playgroud)
我想对页面上的所有文本执行此操作,而不仅仅是它找到的第一个文本.
编辑:我的代码到目前为止这样做:
var re = new RegExp(word, 'g');
$('.container').html($('.container').html().replace(re, '<span class="marked">' + word + '</span>'));
Run Code Online (Sandbox Code Playgroud)
word是一个包含文本的字符串.
说,有以下可能:
textNode.appendChild(elementNode);
Run Code Online (Sandbox Code Playgroud)
elementNode指那些nodeType设置为1的那些
textNode指那些nodeType设置为2的那些
生产起来并不容易.
我问这个的原因是我找到了一个函数,它在引用的末尾添加了一个引用链接:
function displayCitations() {
var quotes = document.getElementsByTagName("blockquote");
for (var i=0; i<quotes.length; i++) {
if (!quotes[i].getAttribute("cite")) continue;
var url = quotes[i].getAttribute("cite");
var quoteChildren = quotes[i].getElementsByTagName('*');
if (quoteChildren.length < 1) continue;
var elem = quoteChildren[quoteChildren.length - 1];
var link = document.createElement("a");
var link_text = document.createTextNode("source");
link.appendChild(link_text);
link.setAttribute("href",url);
var superscript = document.createElement("sup");
superscript.appendChild(link);
elem.appendChild(superscript);
}
}
Run Code Online (Sandbox Code Playgroud)
看到最后一行" elem.appendChild(superscript);"哪里elem可以textNode?
我认为很难证明它的原因是因为很难获得指定的访问权限textNode.有没有人能够实现这一目标?