2015-10-20 35 views
1

我正在使用API​​檢索某個應用程序內部的所有webforms的HTML。麻煩的是,返回的HTML包含<html><style><body>標籤圍繞<form>,但我需要的是<form>(也有onsubmit屬性,但我確信我可以處理這一點) 。刪除字符串中的嵌套html元素

我能夠用一些聰明的正則表達式刪除樣式標籤,但我不確定從<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> 

所有我想出來這個字符串就是<form>雖然

+0

您是否嘗試過使用'DOMDocument'? –

回答

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]

+0

我不得不修改正則表達式,因爲表單標籤本身有一些額外的屬性'「/

(。*?)<\/form> /是」',但是這樣做完美地工作。謝謝!由於某種原因,我還不得不使用'preg_match_all',這並不完全理解 – Banjerr

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>