【问题标题】:Javascript - check if div contains a word?Javascript - 检查 div 是否包含一个单词?
【发布时间】:2012-03-26 12:06:22
【问题描述】:

如何检查 div 是否包含某个单词?

var divs= document.getElementsByTagName('div');
for (var i = 0, len = divs.length; i < len; ++i) {

    if (divs[i].text = '*word*'){
    //do somthing
}
}

没用。

【问题讨论】:

    标签: javascript html if-statement contains


    【解决方案1】:

    html:

    <div id="ok">Hello world</div>
    

    javascript:

    var ok;
    
    ok = document.getElementById("ok").innerHTML
    
    if (ok.includes("world")) {
      document.getElementById("ok").innerHTML = "its working";
    }
    

    【讨论】:

    • 欢迎来到 SO。请花时间解释您的答案,而不仅仅是发布代码。尤其是因为这是一个有其他答案的老问题,所以重要的是要说明为什么您的问题与其他问题不同或有所改进。
    【解决方案2】:

    使用indexOf函数

    if(divs[i].innerHTML.indexOf("word") !== -1) {
        // something
    }
    

    【讨论】:

    • 用 divs[i].style.background = "red"; // 替换某些东西仍然突出显示整个页面。如何获取包含“单词”的 div 的引用?诚然,这个问题并不要求深度,但对于完成度/好奇心,它会很有趣。
    【解决方案3】:

    使用includes():

    node.textContent.includes('Some text');
    

    【讨论】:

    • includes 还不稳定。支持不佳
    【解决方案4】:
    if (document.getElementById('divId').innerHTML.indexOf("word") != -1) { }
    

    【讨论】:

      【解决方案5】:

      使用正则表达式:

      if ( divs[i].textContent.match ( /\bword\b/ ) ){
          //do something
      }
      

      @RobG 提醒我一下

      if ( divs[i].innerHTML.match ( /\bword\b/ ) ){
          //do something
      }
      

      =3=

      【讨论】:

      • 在不支持 W3C DOM textContent 属性的浏览器中不起作用。
      • 另外,与 indexOf 相比,正则表达式更慢并且需要更多的处理
      【解决方案6】:

      天哪,这么多答案!

      要仅获取元素的文本,简单的方法是使用 textContent 或在不支持的情况下使用 innerText。所有使用中的浏览器都支持一种或另一种(可能两者都支持)。您还可以使用正则表达式(indexOf 也可以,RegExp 只是一个选项)所以:

      var re = new RegExp('*' + word + '*');
      
      if (re.test(div[i].innerText || div[i].textContent)) {
        // div[i] contains /*word*/
      } 
      

      更强大的解决方案如下:

      function getText(el) {
        if (typeof el.textContent == 'string') {
          return el.textContent;
        }
        if (typeof el.innerText == 'string') {
          return el.innerText;
        }
      }
      
      var re = new RegExp('*' + word + '*');
      
      if (re.test(getText(div[i]))) {
        // div[i] contains /*word*/
      } 
      

      【讨论】:

        【解决方案7】:

        除了别人说的使用.indexOf()函数,我想说.text不是一个div节点属性。用户.innerHTML

        if (divs[i].innerHTML.indexOf('word') > -1){}
        

        【讨论】:

        • 这也将匹配 HTML 标签内容(即标签名称和属性名称和值)。
        • 没有说明他在寻找什么类型的内容。
        • 我可能是错的,但我认为很明显 OP 正在寻找匹配文本内容,而不是标记。
        【解决方案8】:

        您必须使用比较运算符而不是分配变量。

        if (divs[i].text == '*word*'){
        

        我建议使用indexOf

        if (divs[i].text.indexOf('*word*') != -1){
        

        【讨论】:

          【解决方案9】:

          试试String.indexOf()函数:if (divs[i].text.indexOf('word') != -1) {

          【讨论】:

            猜你喜欢
            • 2011-11-08
            • 2013-01-27
            • 1970-01-01
            • 1970-01-01
            • 2014-05-18
            • 2019-05-29
            • 1970-01-01
            • 2016-07-06
            • 1970-01-01
            相关资源
            最近更新 更多