删除字符串中的嵌套html元素

时间:2015-10-20 13:24:58

标签: php jquery html regex string

我正在使用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>但是

2 个答案:

答案 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>的方法。