我有一个巨大的HTML表单,其中所有输入都设置了name
个参数。我还想为每个输入设置id
(等于名称)。由于实际输入太多,手动复制和粘贴会很糟糕。当然,我可以编写一个程序来解析标签并做到这一点,但这看起来有点矫枉过正。有什么建议吗?
更新:我的意思是在HTML源代码级而不是在运行时执行它。
UPDATE2:该任务实际上意味着替换name="my-field"
模式的每一次出现(代替my-field
可以有任何合理的东西(但通常会包含负数,所以只支持字母是不够的) ))name="my-field" id="my-field"
。我相信这可以用sed
之类的东西来完成,但令我感到羞耻的是,我很难掌握正则表达式。
答案 0 :(得分: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>
答案 1 :(得分:1)
如果你的HTML是XHTML(格式正确)(或者你可以使用JTidy将其转换为XHTML),你可以使用XSLT转换将name属性的内容复制到新的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
属性的内容向每个input
添加新的name
属性:
<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>
您可以使用命令行工具行Saxon运行XSLT处理器。
答案 2 :(得分:1)
我只想使用正则表达式搜索&amp;替换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>
上述正则表达式搜索&amp;使用.NET's regex syntax替换值,但它们很容易适应Java regex syntax或其他正则表达式语法。
实际上,使用RegexPlanet Java regex tester,我confirmed上面的正则表达式搜索&amp;替换值应该与编辑器或其他支持Java正则表达式语法的工具一样。
答案 3 :(得分:0)
你可以试试这个:
$("form#myForm :input").each(function(){
var input = $(this);
input.attr('id', input.attr('name'));
});
尚未测试,但猜测应该有效。