检测字符串是否包含表格

时间:2013-07-29 16:53:25

标签: javascript jquery html ckeditor

我有一个关于查看string

的问题

string来自ckeditor,因此用户可以输入任何内容。

variable名称为htmlData,就像:

test here<br />
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px;">
    <tbody>
        <tr>
            <td>
                111</td>
            <td>
                222</td>
        </tr>
        <tr>
            <td>
                333</td>
            <td>
                444</td>
        </tr>
        <tr>
            <td>
                555</td>
            <td>
                666</td>
        </tr>
    </tbody>
</table>
<br />
second test 

我想检测用户是否添加table结构并尝试了

 if(htmlData.indexOf('</table>').length > -1){
             console.log('table detected')
        }

但它在console中没有显示任何内容。任何人都可以暗示这一点吗?

非常感谢!

6 个答案:

答案 0 :(得分:8)

String.indexOf()返回原始数值,具体为:

  

第一次出现指定值的调用index对象中的 String ,开始搜索fromIndex {{1如果找不到值,则

这些原语没有属性,即:-1

length

因此,只需从代码中删除if(htmlData.indexOf('</table>').length > -1){ console.log('table detected') }

.length

答案 1 :(得分:3)

使用 -

if(htmlData.indexOf('</table>') > -1){
         console.log('table detected')
}

或者你可以使用jQuery找到任何标签 -

var el = $("<div>"+htmlData+"</div>");
if(el.find("table").length>0){
    console.log("it contains table");
}

它适用于任何标记,类,id或任何css选择器。

var el = $(htmlData);
if(el.find(".some-class").length>0){
    console.log("it contains some-class");
}

答案 2 :(得分:3)

你可以使用它:

if(/<table>/i.test(htmlData));

答案 3 :(得分:1)

为什么.length?

if(htmlData.indexOf('</table>') > -1){
         console.log('table detected')
    }

这应该可以正常工作。 indexOf如果找不到则返回索引(-1),而不是数组,因此未定义length属性

答案 4 :(得分:1)

IndexOf没有属性length。正如名称“index”所示,它为您提供索引。 此外:为什么只检查,如果用户输入了结束标签?您还应该检查开始标记。然后 - 为什么不使用RegEx,如:

/<table>.*?<\/table>/.test(htmlData)

要测试两者?

CAVE!此RegEx不会检查用户是否输入了有效的html-Table-tag。这只是对&lt;的出现的愚蠢检查。表&gt; resp。 &LT; / table&gt;

答案 5 :(得分:1)

添加相同答案的集合会很愚蠢,所以使用match这个方法怎么样,这会告诉你该字符串中有多少个表。

var string = htmlData.replace(/\s/g, ""); 
// Trim all whitespace..

var matches = string.match(/<\/table>/g); 
// Will return 1 for your code and 2 for the demo

然后你会这样检查

if( matches > 0 ) {
  // There is at least 1 table here
}

Demo