我正在使用API来检索特定应用程序内所有webforms的HTML。问题是返回的HTML包含<html>
周围的<style>
,<body>
和<form>
标记,但我需要的只是<form>
(还有一个onsubmit
属性,但我相当确定我可以稍微处理一下这个问题。
我能够使用一些聪明的正则表达式删除样式标记,但我不确定如何从<form>
和<html>
标记的中间删除<body>
。
到目前为止,这一切都发生在PHP中。我想可能json_encode
字符串然后传递给JS并使用jQuery到getJSON
可能吗?尽管如此,我仍然没有100%明白最好的方法。
我返回的php字符串示例......
<html width="100%" height="100%">
<body class="body stuff">
<form>
<input type="text" name="input">
<input type="text" name="anotherInput">
</form>
</body>
</form>
我想要的所有字符串都是<form>
但是
答案 0 :(得分:2)
<?
$regex = "/<form>(.*?)<\/form>/s";
preg_match($regex,$string,$match);
print_r($match);
?>
应该会产生这样的结果:
Array
(
[0] => <form>
<input type="text" name="input">
<input type="text" name="anotherInput">
</form>
[1] =>
<input type="text" name="input">
<input type="text" name="anotherInput">
)
您需要的是$match[1]
答案 1 :(得分:0)
您可以使用$.parseHTML()将字符串转换为DOM对象。
然后追加或使用DOM traversal查找您需要的任何对象。此外,当您使用$.parseHTML()时,它似乎会自动删除<html>
和<body>
标记,只留下文档的内部。
var string = '<html width="100%" height="100%"><body class="body stuff"><form><input type="text" name="input"><input type="text" name="anotherInput"></form></body></html>';
var htmlObject = $.parseHTML(string);
$('body').append( htmlObject );
这是我放在一起的快速DEMO。
修改强>
在DEMO中,您可以看到$.each()方法循环遍历该对象,并将nodenames
附加到无序列表中。这是验证$.parseHTML()实际从对象中删除<html>
和<body>
的方法。