Javascript计算cetain元素的数量
我有一些javascript返回一段代码,这段代码包含了大量随机的Javascript计算cetain元素的数量,javascript,html,html-lists,element,Javascript,Html,Html Lists,Element,我有一些javascript返回一段代码,这段代码包含了大量随机的元素,示例输出如下: <li class="shiny-box choice clearfix" data-choice-id="0"> <span class="index">1.</span> <span class="val ">vīta vītae f.</span> <span class="marking-icon"><
元素,示例输出如下:
<li class="shiny-box choice clearfix" data-choice-id="0">
<span class="index">1.</span>
<span class="val ">vīta vītae f.</span>
<span class="marking-icon"></span>
</li>
<li class="shiny-box choice clearfix" data-choice-id="1">
<span class="index">2.</span>
<span class="val ">patria patriae f.</span>
<span class="marking-icon"></span>
</li>
<li class="shiny-box choice clearfix" data-choice-id="2">
<span class="index">3.</span>
<span class="val ">poena poenae f.</span>
<span class="marking-icon"></span>
</li>
<li class="shiny-box choice clearfix" data-choice-id="3">
<span class="index">4.</span>
<span class="val ">fortūna fortūnae f.</span>
<span class="marking-icon"></span>
</li>
var array = ["vīta vītae f.","patria patriae f.","poena poenae f.","fortūna fortūnae f."];
请记住,并非总是有4个
元素
有什么函数可以做到这一点吗?使用正则表达式:
var rawHTML = '<li class="shiny-box choice clearfix" data-choice-id="0"> <span class="index">1.</span> <span class="val ">vīta vītae f.</span> <span class="marking-icon"></span> </li> <li class="shiny-box choice clearfix" data-choice-id="1"> <span class="index">2.</span> <span class="val ">patria patriae f.</span> <span class="marking-icon"></span> </li> <li class="shiny-box choice clearfix" data-choice-id="2"> <span class="index">3.</span> <span class="val ">poena poenae f.</span> <span class="marking-icon"></span> </li> <li class="shiny-box choice clearfix" data-choice-id="3"> <span class="index">4.</span> <span class="val ">fortūna fortūnae f.</span> <span class="marking-icon"></span> </li>';
var myArray = [];
var myRegexp = /<span class="val ">(.*?)<\/span>/g;
match = myRegexp.exec(rawHTML);
while (match != null) {
myArray.push(match[1]);
match = myRegexp.exec(rawHTML);
}
var rawHTML='1。vīta vītae f 2。帕特里亚帕特里亚f 3。poena poenae f 4。阿纳堡阿纳堡f李>';
var myArray=[];
var myRegexp=/(.*)/g;
match=myRegexp.exec(rawHTML);
while(匹配!=null){
myArray.push(匹配[1]);
match=myRegexp.exec(rawHTML);
}
如果从字符串开始,首先需要让浏览器将字符串解析为DOM。您可以通过创建一个伪HTML元素,并将原始HTML作为
innerHTML
属性放入其中来实现这一点。然后,您可以使用querySelectorAll
(或getElementsByClassName
)搜索它,但QSA功能更强大,而且不会进行实时收集,因此有额外的好处)。当您有一组节点时,可以使用map
函数提取textContent
map
兼容,但实际上没有,因此我们必须从阵列原型中“借用”它
请注意,您应该使用textContent
而不是innerHTML
来提取字符串,因为如果在HTML中使用“fortū;na”
而不是“fortūna”
(两者在HTML中的含义相同,但第一个是编码不可知的),innerHTML
将为您提供前者,而textContent
将为您提供后者
var rawHTML='1。vīta vītae f 2。帕特里亚帕特里亚f 3。poena poenae f 4。阿纳堡阿纳堡f李>';
var root=document.createElement('div');
root.innerHTML=rawHTML;
var valNodes=root.querySelectorAll('.val');
var text=Array.prototype.map.call(valNodes,node=>node.textContent);
控制台日志(文本)代码>一个重要的澄清:您是否将HTML作为字符串,作为您已经选择的节点集合,作为DOM的内容。。。?是在服务器端还是客户端?@Amadan所有这些代码都是在客户端完成的,代码由函数返回。(例如var bla=abc();
和变量blah
是上面的代码[在引号中]),上面HTML的原始来源是什么?如果它在DOM中(即,页面的一部分),那么直接从那里获取数据将是最容易的,而不是让函数以字符串的形式返回HTML,然后需要进行处理。事实上,一般的假设是DOM中的HTML。@nnnnnnnn我正在使用一些函数在另一个网站上运行,我只需要从代码中刮出数据就可以使用。鉴于OP的澄清,这不起作用。他在DOM中没有.val
。@Amadan你是对的。我已经修改了我的答案。谢谢你再三考虑,我有一个特殊的功能,可以将拉丁语转换成Crylical。非常感谢你。我觉得不可能。