5

我有一个关于检查的问题string

string是来自一个ckeditor所以用户可以输入任何东西。

名字variablehtmlData这样的:

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. 任何人都可以对此提供提示吗?

非常感谢!

4

6 回答 6

9

String.indexOf()返回一个原始数值,具体来说:

在指定值的第一次出现index的调用String对象内,如果未找到该值,则开始fromIndex搜索-1

这些原语没有属性,即:length.

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

因此,只需.length从您的代码中删除:

if(htmlData.indexOf('</table>') > -1){
    console.log('table detected')
}
于 2013-07-29T16:55:05.937 回答
3

你可以使用它:

if(/<table>/i.test(htmlData));
于 2013-07-29T16:57:28.530 回答
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");
}
于 2013-07-29T16:55:53.547 回答
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
}

演示

于 2013-07-29T17:07:46.427 回答
1

为什么是.length?

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

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

于 2013-07-29T16:56:44.407 回答
1

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

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

测试两者?

洞穴!此 RegEx 不检查用户是否输入了有效的 html-Table-tag。这只是对<table> resp发生的愚蠢检查。</表>

于 2013-07-29T17:03:43.957 回答