Javascript查找除<;a>;标签

Javascript查找除<;a>;标签,javascript,html,regex,Javascript,Html,Regex,我有一个div,这个div可以(或者不能)将html元素作为子元素。使用javascript,我需要找到这个div中出现的所有单词,除了 洛勒姆 我试图用我的超低能力构建一个正则表达式,但失败惨重。 所以我在谷歌上找到了这个: var pattern = new RegExp('(lorem)(?![^<]*>|[^<>]*</)', 'gim'); var pattern=newregexp('(lorem)(?![^ |[^]*没有正则表达式。绝对没有正则

我有一个div,这个div可以(或者不能)将html元素作为子元素。使用javascript,我需要找到这个div中出现的所有单词,除了



洛勒姆

我试图用我的超低能力构建一个正则表达式,但失败惨重。 所以我在谷歌上找到了这个:

var pattern = new RegExp('(lorem)(?![^<]*>|[^<>]*</)', 'gim');

var pattern=newregexp('(lorem)(?![^ |[^]*没有正则表达式。绝对没有正则表达式。不,不

var copy = document.getElementById('dictionable').cloneNode(true),
    links = copy.getElementsByTagName('a'), l = links.length, i;
for( i=l-1; i>=0; i--) {
    // always work in reverse order when deleting stuff, it's safer!
    links[i].parentNode.removeChild(links[i]);
}

var result = copy.textContent || copy.innerText;

Boom!

使用jquery太简单了

var $dictionable = $("#dictionable").clone();
$dictionable.find('a').remove();//This will remove all <a> tag
$dictionable.text();//This will give all text
var$dictable=$(“#dictable”).clone();
$dictable.find('a').remove();//这将删除所有标记
$dictable.text();//这将给出所有文本

由于元素中的所有内容都被视为元素本身,因此您可以简单地遍历div的子元素

诚然,由于它的有效性,它不是最短的解决方案,但它应该相对较快

var d = document.getElementById('dictionable');
var textcontent = '';
for (node in d.childNodes) {
    // accept only element (1), text (3) and non-link element
    if ((d.childNodes[node].nodeType != 1 && 
        d.childNodes[node].nodeType != 3) || 
        d.childNodes[node].nodeName == 'A')
        continue;

    textcontent = textcontent+d.childNodes[node].textContent
}

这就是你甚至可以在循环中设置搜索,并将结果缩小到单个元素级别。

不要用正则表达式解析html,jQuery是一个选项吗?对jQuery来说可以。我喜欢Jeff Atwood的幽默:DjQuery或普通JS,这一点是一样的-正则表达式不适合查询DOM。有内置函数允许遍历DOM安全准确,正如Niet的回答。这是一个很好的起点。我不需要删除标记,只要在标记出现时忽略它们就行了。我喜欢你的方法。但是有任何理由不喜欢
文档。querySelectorAll
而不是
文档。getElementsByTagName
?@Valerio你正在删除(即忽略)请注意
cloneMode
方法的用法。@Boaz
getElementsByTagName
querySelectorAll
存在的时间要长得多。即使在古老的IE版本中,这个答案的代码也应该有效。此外,您可能会认为变量名
copy
我是一个线索XD@Valerio
result
变量包含您的文本。请随意使用它。这会破坏原始文本。错误。使用
.clone()
克隆父级
div
将极大地改进此答案。是的-jQuery代码编写时间短得多,但是;)链接jQuery的方法,您甚至可以将其缩短为一行:
$(“#可编辑的”).clone().find('a').remove().end().text()
@Valerio这里的两个答案说明了如何获取
可编辑的
div中除
a
元素中的文本以外的所有文本,以便您可以使用它来查找特定字符串的所有匹配项(因为这是您说过要做的)。如果您实际上还有更具体的要求,我建议您创建一个新问题(并在将来注意更具体)。这只会迭代可编辑的
的直接子项。其中一些子项可能包含
元素。(顺便说一句,并非所有元素的子元素都是元素;只有那些节点类型===1的子元素才是元素)。
var d = document.getElementById('dictionable');
var textcontent = '';
for (node in d.childNodes) {
    // accept only element (1), text (3) and non-link element
    if ((d.childNodes[node].nodeType != 1 && 
        d.childNodes[node].nodeType != 3) || 
        d.childNodes[node].nodeName == 'A')
        continue;

    textcontent = textcontent+d.childNodes[node].textContent
}