【问题标题】:Removing nested html element in a string删除字符串中的嵌套 html 元素
【发布时间】:2016-01-19 04:29:09
【问题描述】:

我正在使用 API 来检索某个应用程序内所有 Web 表单的 HTML。问题是返回的 HTML 在<form> 周围包含<html><style><body> 标签,但我只需要<form>(还有一个onsubmit 属性,但我相当当然我可以在路上处理一点)。

我能够使用一些巧妙的正则表达式删除样式标签,但我不确定从<html><body> 标签中间删除<form> 的方法。

到目前为止,这一切都发生在 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>

我想要从这个字符串中得到的只是&lt;form&gt;

【问题讨论】:

  • 您是否尝试过使用DOMDocument

标签: php jquery html regex string


【解决方案1】:
<?
$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]

【讨论】:

  • 我不得不稍微修改一下正则表达式,因为表单标签本身有一些额外的属性"/&lt;form (.*?)&gt;(.*?)&lt;\/form&gt;/is",但这最终工作得很好。谢谢!由于某种原因,我还不得不使用preg_match_all,我不完全理解
【解决方案2】:

您可以使用 $.parseHTML() 将您的字符串转换为 DOM 对象。

然后附加或使用DOM traversal 来查找您需要的任何对象。此外,当您使用$.parseHTML() 时,它似乎会自动删除&lt;html&gt;&lt;body&gt; 标签,只留下文档的内部部分。

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() 是否确实从对象中删除了&lt;html&gt;&lt;body&gt; 的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-23
    • 2023-03-19
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2018-06-06
    • 1970-01-01
    相关资源
    最近更新 更多