2014-02-19 16 views
1

我有一個巨大的HTML表單,其中所有輸入都設置了name參數。我還想爲每個輸入設置id(等於名稱)。手動複製和粘貼會很糟糕,因爲實際上輸入太多。當然,我可以編寫一個解析標籤的程序,並做到這一點,但這看起來有點矯枉過正。有什麼建議麼?如何將HTML標籤參數值複製到同一標籤的另一個參數中(對於源文本中的每個標籤)?

更新:我的意思是在HTML源代碼級而不是在運行時。

UPDATE2:任務,其實就是更換name="my-field"模式的每次出現(那裏可以是任何合理到位的my-field(但將包含減去通常,所以支持只是字母是不夠的))與name="my-field" id="my-field"。我相信這可以用像sed這樣的東西來完成,但對於我的恥辱,我很少熟練掌握正則表達式。

+0

我會建議一個正則表達式搜索並替換爲此;但是如果沒有對「輸入」元素屬性的(一致性)的意義 - 例如他們是否已經擁有'id'屬性,他們的'name'和'id'屬性'順序是否一致,等等。你能否提供一個你想要轉換的(清理過的)例子? – J0e3gan

+1

'name =「my-field」'to'name =「my-field」id =「my-field」@ @ J0e3gan不幸的是我不熟練地使用regexes。 – Ivan

回答

1

我會簡單地使用正則表達式搜索&替換HTML文件中的這個。

給定的輸入...

<html> 
    <head> 
    <title>Whatever</title> 
    </head> 
    <body> 
    <form> 
     <input name="foo"/> 
     <input name="bar"/> 
     <input name="foo-bar"/> 
    </form> 
</html> 

...,在正則表達式搜索...

name="([a-zA-Z\-]+)" 

...並替換...

name="$1" id="$1" 

...會產生:

<html> 
    <head> 
    <title>Whatever</title> 
    </head> 
    <body> 
    <form> 
     <input name="foo" id="foo"/> 
     <input name="bar" id="bar"/> 
     <input name="foo-bar" id="foo-bar"/> 
    </form> 
</html> 

以上正則表達式搜索&取代值使用.NET's regex syntax,但它們很容易適應Java regex syntax或其他正則表達式語法。

其實,使用RegexPlanet Java regex tester,我confirmed,上述正則表達式搜索&頂替值將正常運行,與任何支持Java的正則表達式的語法太編輯器或其他工具。

+1

完成這項工作。謝謝。 – Ivan

2

您可以使用JavaScript來實現這一點:像這樣的東西應該工作

<html> 
<head> 
<script type="text/javascript"> 
**function loadId() { 
var inputs = document.getElementsByTagName('input'); 
for (var i = 0, len = inputs.length; i < len; i++) { 
inputs[i].id = inputs[i].name; 
} 
}** 
</script> 
</head> 
<body onload="loadId()"> 
<input name = "test1" /> 
<input name = "test2" /> 
<input name = "test3" /> 

</body> 
</html> 
+0

我想我寧願在源代碼級而不是運行時應用更改。 – Ivan

+1

+1適用於酷炫的運行時解決方案。 – J0e3gan

0

你可以試試這個:

$("form#myForm :input").each(function(){ 
    var input = $(this); 
    input.attr('id', input.attr('name')); 
}); 

沒有測試過,但猜測應該工作。

1

如果您的HTML是XHTML(格式良好)(或者如果您可以使用JTidy將其轉換爲XHTML),則可以使用XSLT轉換將名稱屬性的內容複製到新的id屬性中。

這個樣式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

    <xsl:output method="html" indent="yes"/> 

    <xsl:template match="@*"> 
     <xsl:attribute name="{name()}"> 
      <xsl:value-of select="."/> 
     </xsl:attribute> 
    </xsl:template> 

    <xsl:template match="*"> 
     <xsl:copy> 
      <xsl:apply-templates select="*|@*|text()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="input"> 
     <xsl:copy> 
      <xsl:attribute name="id"> 
       <xsl:value-of select="@name" /> 
      </xsl:attribute> 
      <xsl:apply-templates select="@*" /> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

將文件轉換與此內容:

<form> 
    <div class="inputs"> 
     <p style="color:red">Text</p> 
     <input type="text" name="a" /> 
     <input type="password" name="b" /> 
     <input type="checkbox" name="c" /> 
     <input type="radio" name="d" /> 
    </div> 
</form> 

進入這個(增加了一個新的id屬性,每個inputname屬性的內容):

<form> 
    <div class="inputs"> 
     <p style="color:red">Text</p> 
     <input id="a" type="text" name="a"> 
     <input id="b" type="password" name="b"> 
     <input id="c" type="checkbox" name="c"> 
     <input id="d" type="radio" name="d"> 
    </div> 
</form> 

您可以運行XSLT處理器使用命令行工具行Saxon

+0

我選擇了@ j0e3gan的解決方案作爲最快的去,但你的一個看起來最完美。謝謝。 – Ivan

相關問題