Javascript计算cetain元素的数量

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"><

我有一些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"></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
    NodeList与
    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。非常感谢你。我觉得不可能。