我有一个关于查看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
中没有显示任何内容。任何人都可以暗示这一点吗?
非常感谢!
答案 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
}