Javascript 在空白处拆分句子并查找单词
好吧,这是一个我一直坚持的微笑问题。我试图制作一个HTML文本框,当提交时,文本被抛出到一个函数中,并检查是否有任何链接。如果有一个链接,它将被包装在锚定标签中,并制作成一个可点击的链接 所以我让那个部分工作,但我创建了一个编辑函数。因此,当在注释上按下编辑按钮时,将显示一个带有已创建注释的弹出窗口。注释的值(取自XML文件)放入此编辑文本区域的值中。但是链接的值仍然有锚定标记,因此看起来非常混乱 我正在尝试创建一个函数,该函数运行在这个注释上,删除所有锚定标记,并且只在锚定标记中包含剩余的文本 举个简单的例子,当用户使用类似www.stackoverflow.com的链接发布评论时,它将保存在我的XML文档中,如下所示:Javascript 在空白处拆分句子并查找单词,javascript,html,anchor,hyperlink,Javascript,Html,Anchor,Hyperlink,好吧,这是一个我一直坚持的微笑问题。我试图制作一个HTML文本框,当提交时,文本被抛出到一个函数中,并检查是否有任何链接。如果有一个链接,它将被包装在锚定标签中,并制作成一个可点击的链接 所以我让那个部分工作,但我创建了一个编辑函数。因此,当在注释上按下编辑按钮时,将显示一个带有已创建注释的弹出窗口。注释的值(取自XML文件)放入此编辑文本区域的值中。但是链接的值仍然有锚定标记,因此看起来非常混乱 我正在尝试创建一个函数,该函数运行在这个注释上,删除所有锚定标记,并且只在锚定标记中包含剩余的文本
<a href="www.stackoverflow.com">www.stackoverflow.com</a>
在我的非工作功能中,是关于我认为应该如何完成的注释,尽管我不确定如何实现。考虑寻找链接,然后将链接元素替换为其内容的文本节点。以下内容将替换页面中的每个链接:
windowonload = function() {
var links = document.links;
var link, node;
var i = links.length;
while (i--) {
link = links[i];
node = document.createTextNode(link.textContent || link.innerText);
link.parentNode.replaceChild(node, link);
}
};
考虑寻找链接,然后将link元素替换为其内容的文本节点。以下内容将替换页面中的每个链接:
windowonload = function() {
var links = document.links;
var link, node;
var i = links.length;
while (i--) {
link = links[i];
node = document.createTextNode(link.textContent || link.innerText);
link.parentNode.replaceChild(node, link);
}
};
这应该行得通,但是可能有更有效的方法。 我测试了性能,它似乎比公认的解决方案快得多,但我想它可能不那么可靠。这是测试
函数转换链接编辑(文本){
var rx=/]*?href=“([^“]+)”[^>]*>[^这应该会起作用,但是可能有更有效的方法。
我测试了性能,它似乎比公认的解决方案快得多,但是我想它可能不那么可靠
函数转换链接编辑(文本){
var rx=/*?href=“([^“]+)”[^>]*>[^您可以使用正则表达式查找href
。因为您的单词将是href=“someurl”>
假设您的链接是按照我前面提到的那样创建的,并且您的href属性具有“
而不是”
引号。您可以使用regex查找href
。因为您的单词将是href=“someurl”>
假设您的链接是按照我前面提到的那样创建的,并且您的href属性具有“
而不是”
引号。实际上,DOM足够聪明,可以为您将链接解析为文本,因此您可以简单地使用:
函数转换链接编辑(文本){
//只需创建一个空的元素
var dummy=document.createElement('p');
//将其HTML内容更改为注释内容
dummy.innerHTML=文本;
//返回我们的
返回dummy.textContent | | dummy.innerText;//我们首先查找textContent*(较新的浏览器),如果需要,返回innerText(较旧的浏览器)
}
*有关文本内容的信息,请查看此处:
不过,我不知道上面的浏览器兼容性,因此,RobG的变体应用于您的功能:
function convertLinkEdit(text) {
var dummy = document.createElement('p');
dummy.innerHTML = text;
var links = dummy.getElementsByTagName('a');
for (var i = 0, l = links.length; i < l; i++)
{
var link = links[i];
var node = document.createTextNode(link.textContent || link.innerText);
link.parentNode.replaceChild(node, link);
}
return dummy.textContent || dummy.innerText;
}
函数转换链接编辑(文本){
var dummy=document.createElement('p');
dummy.innerHTML=文本;
var links=dummy.getElementsByTagName('a');
对于(变量i=0,l=links.length;i
仅供参考:您应该始终使用及其API来解析/操作HTML。强烈建议不要将正则表达式用于HTML解析。
是的,它在某些情况下可能会工作,但您无法控制它,因为它无法正确区分属性、元素和DOM带来的所有其他混乱
更新:
这是一个更新版本
问题是,正如plaxl已经指出的那样,getElementsByTagName
和任何其他getElement..
家族成员将返回一个节点列表,该节点列表是活动对象。一旦节点列表中的某个元素发生更改,它将自动更新
我添加了一个小片段,它将在进入转换循环之前将NodeList转换为简单数组
尽管如此,如果函数的第一个版本适合您,请使用该版本,它应该比2次循环快得多。实际上,DOM足够智能,可以为您将链接解析为文本,因此您可以简单地使用:
函数转换链接编辑(文本){
//只需创建一个空的元素
var dummy=document.createElement('p');
//将其HTML内容更改为注释内容
dummy.innerHTML=文本;
//返回我们的
返回dummy.textContent | | dummy.innerText;//我们首先查找textContent*(较新的浏览器),如果需要,返回innerText(较旧的浏览器)
}
*有关文本内容的信息,请查看此处:
不过,我不知道上面的浏览器兼容性,因此,RobG的变体应用于您的功能:
function convertLinkEdit(text) {
var dummy = document.createElement('p');
dummy.innerHTML = text;
var links = dummy.getElementsByTagName('a');
for (var i = 0, l = links.length; i < l; i++)
{
var link = links[i];
var node = document.createTextNode(link.textContent || link.innerText);
link.parentNode.replaceChild(node, link);
}
return dummy.textContent || dummy.innerText;
}
函数转换链接编辑(文本){
var dummy=document.createElement('p');
dummy.innerHTML=文本;
var links=dummy.getElementsByTagName('a');
对于(变量i=0,l=links.length;i
仅供参考:您应该始终使用及其API来解析/操作HTML。强烈建议不要将正则表达式用于HTML解析。
是的,它在某些情况下可能会起作用,但你无法控制它,因为它不会起作用
function convertLinkEdit(text) {
// simply create an empty <p> element
var dummy = document.createElement('p');
// change it's HTML contents to the comment one
dummy.innerHTML = text;
// return the TEXT value of our <p>
return dummy.textContent || dummy.innerText; // we first look up textContent* (newer browsers) and fall back to innerText (older browsers) if needed
}
function convertLinkEdit(text) {
var dummy = document.createElement('p');
dummy.innerHTML = text;
var links = dummy.getElementsByTagName('a');
for (var i = 0, l = links.length; i < l; i++)
{
var link = links[i];
var node = document.createTextNode(link.textContent || link.innerText);
link.parentNode.replaceChild(node, link);
}
return dummy.textContent || dummy.innerText;
}