2009-05-18 84 views
0

我試圖從<form>標籤中提取所有<input >標籤。我創建了一個正則表達式,它可以識別整個<form>標記和所有代碼,直到結尾</form>,但我無法弄清楚如何匹配所有<input[^>]+>正則表達式將輸入標籤拉出表格

編輯:數據是一個字符串。我不能使用DOM函數,因爲它不是文檔的一部分。如果我將它插入到隱藏標記中,它會更改頁面的佈局,因爲該字符串包含整個HTML頁面,包括指向外部樣式表的鏈接。

+0

請問您打算如何處理結果。有可能是另一種更好的方式來做到這一點比正則表達式 – 2009-05-18 20:28:47

+0

我同意。正則表達式在處理像HTML這樣的嵌套語法方面非常糟糕。 – 2009-05-18 20:30:45

+0

是的,我知道...我正在做的是試圖將標籤拉出AJAX結果。但AJAX結果是一個字符串,所以我不能使用它的DOM功能。查看http://stackoverflow.com/questions/855404/can-javascript-access-the-dom-of-an-ajax-text-html-response – Josh 2009-05-18 20:33:19

回答

2

爲什麼你不能只使用DOM?

var inputFields = document.getElementById('form_id').getElementsByTagName('input'); 
for (var i = 0, l = inputFields.length; i < l; i++) { 
    // Do something with inputFields[i] ... 
} 

如果必須使用正則表達式:

var formHTML = document.getElementById('form_id').innerHTML; 
var inputs = formHTML.match(/<input.+?\/?>/g); 

注意,上述正則表達式是不可靠的,並不會在所有情況下工作,因此爲什麼你應該使用DOM! :)

0

您可以使用document.createElement創造一些元素,然後(AB)使用它的innerHTML屬性來創建一個字符串的DOM:

var html = document.createElement("div"); 
html.innerHTML = "<form><input/><input/><input/></form>"; 

// now you can use dom methods, e.g. getElementsByTagName 
var inputs = html.getElementsByTagName("input"); 
var foo = inputs[0].value; // ... 

您可能必須事前雖爲手動刪除您<html>標籤IE無法解析完整的文檔(如果我沒有記錯的話)。