我有一些无效嵌套的HTML,如:
<form class="form1" method="get">
<div>
<input name="field1">
</form>
<form class="form2" method="get">
<input name="field1">
</form>
</div>
是的,这是一团糟,不要问。无效的嵌套会导致其他地方出现问题。 jQuery我认为期待收盘</div>
,并且只在最后一个找到它。然后它将第二个<form>
标记视为无效,并且还丢弃其上方的结束</form>
,并假设第1行和第9行之间的所有内容都是一种形式。
如果我将这些输出到控制台:
$('.form1).html()
- 所有第1 - 9行$('.form2).html()
- undefined 所以我要做的是将整个事物视为字符串,并使用正则表达式去除form2。我期待一个正则表达式:
formText.replace(/(<form\b[^>]*>)[^<>]*(<\/form>)/gi, "");
但我不确定如何使用class=form2
引用特定表单
它也是一个多行字符串的问题。
更新:添加了更多细节,概述了为什么jQuery的remove()
方法不起作用。不幸的是,jQuery只认为有一种形式。
答案 0 :(得分:2)
Don't use regex to parse HTML.由于您使用的是jQuery,只需使用.remove()
:
$(function() {
$(".form2").remove();
});
答案 1 :(得分:0)
我最终使用了:
formText = formText.replace(/(<form\b[^>]*form2+.*>[\s\S]+<\/form>)/gi, "");
[\s\S]
匹配所有字符,包括\n
和\r
,以涵盖换行符。
我可能已经使正则表达式中处理类名的部分更具体,所以我知道它是类,而不是其他类似的随机形式,但在实践中它并不重要(只有一个第二种形式的实例,具有非常具体的类名。)