Javascript 替换克隆元素上所有属性的更好方法?
这段代码是有效的,但对我来说似乎有点长。我只在绝对必要的时候才倾向于编写JS/Jquery,所以我是个不折不扣的傻瓜 我正在克隆一个元素,然后用我创建的属性替换所有属性 以下是JSFIDLE,或下面的代码片段: HTML: 这里有一个更新的JSFIDLE,其中包含我完成的代码供参考Javascript 替换克隆元素上所有属性的更好方法?,javascript,jquery,html,Javascript,Jquery,Html,这段代码是有效的,但对我来说似乎有点长。我只在绝对必要的时候才倾向于编写JS/Jquery,所以我是个不折不扣的傻瓜 我正在克隆一个元素,然后用我创建的属性替换所有属性 以下是JSFIDLE,或下面的代码片段: HTML: 这里有一个更新的JSFIDLE,其中包含我完成的代码供参考 谢谢大家的帮助 简单回答:没有更好的方法了 长答覆: 您可以将jQuery对象分配到一个变量中,这样就不必重复查询选择器 e、 g 变成 var newModInput = $( 'input', $newMod
谢谢大家的帮助 简单回答:没有更好的方法了 长答覆: 您可以将jQuery对象分配到一个变量中,这样就不必重复查询选择器 e、 g 变成
var newModInput = $( 'input', $newMod );
newModInput.attr( 'id', $modLabel );
newModInput.attr( 'name', $modLabel );
newModInput.attr( 'value', " ");
newModInput.val( '' );
由于不必每次都遍历$newMod来查找输入,因此这也可能稍微更有效。但这还不足以引起注意。简短的回答:没有更好的方法 长答覆: 您可以将jQuery对象分配到一个变量中,这样就不必重复查询选择器 e、 g 变成
var newModInput = $( 'input', $newMod );
newModInput.attr( 'id', $modLabel );
newModInput.attr( 'name', $modLabel );
newModInput.attr( 'value', " ");
newModInput.val( '' );
由于不必每次都遍历$newMod来查找输入,因此这也可能稍微更有效。但这还不足以引起注意。问题的本质不适合完全自动化,但可以使用一些语法快捷方式来减少重复。而不是:
$( 'label', $newMod ).attr( 'for', $modLabel );
$( 'input', $newMod ).attr( 'id', $modLabel );
$( 'input', $newMod ).attr( 'name', $modLabel );
$( 'input', $newMod ).attr( 'value', " ");
$( 'input', $newMod ).val( '' );
尝试:
问题的本质不适合完全自动化,但有一些语法捷径可用于减少重复。而不是:
$( 'label', $newMod ).attr( 'for', $modLabel );
$( 'input', $newMod ).attr( 'id', $modLabel );
$( 'input', $newMod ).attr( 'name', $modLabel );
$( 'input', $newMod ).attr( 'value', " ");
$( 'input', $newMod ).val( '' );
尝试:
您可以大大简化HTML,这可能使您能够简化JavaScript 当前,您有重复的ID,这在HTML中是不允许的:
<li id="equipment-0">
<label for="equipment-0">Equipment</label>
<select id="equipment-0" name="equipment-0">
<option selected value="1">T700</option>
<option value="3">iLink</option>
</select>
</li>
此时,您只剩下一个在克隆后需要更改的属性。您可以大大简化HTML,这可能使您能够简化JavaScript 当前,您有重复的ID,这在HTML中是不允许的:
<li id="equipment-0">
<label for="equipment-0">Equipment</label>
<select id="equipment-0" name="equipment-0">
<option selected value="1">T700</option>
<option value="3">iLink</option>
</select>
</li>
此时,您只剩下一个在克隆后需要更改的属性。您可以使用把手简化模板,您可以查看此处() Handlebar与JQuery配合得很好 您可以创建模板(在html中附加此脚本标记) $equipmentTemplate包含已编译的equipmentTemplate,将带有正确键:值对的json传递给$equipmentTemplate,它将用值替换键
var $eqLabel = 'equipment-' + num;
var eqContext = {eqLabel: $eqLabel};
var eqhtml = $equipmentTemplate(eqContext);
$( "#eqblock" ).append( eqhtml );
你可以用modblock做同样的事情
示例:您可以使用把手简化模板,您可以在此处查看() Handlebar与JQuery配合得很好 您可以创建模板(在html中附加此脚本标记) $equipmentTemplate包含已编译的equipmentTemplate,将带有正确键:值对的json传递给$equipmentTemplate,它将用值替换键
var $eqLabel = 'equipment-' + num;
var eqContext = {eqLabel: $eqLabel};
var eqhtml = $equipmentTemplate(eqContext);
$( "#eqblock" ).append( eqhtml );
你可以用modblock做同样的事情
示例:@j08691嘿,谢谢你。我不知道有个地方可以放这种东西。@j08691嘿,谢谢你。我不知道有个地方可以放这种东西谢谢。这就是我最后要做的,所以我每个元素只查找一次。谢谢。这就是我最终要做的,所以我只对每个元素进行一次查找。感谢您的建议。不幸的是,我正在使用flask和wtforms生成HTML和表单,所以我不能使用模板,因为select字段的选项最终是从添加到SQLAlchemy模型的值生成的,而这些值反过来又是一个MySQL数据库。感谢您的建议。不幸的是,我正在使用flask和wtforms生成HTML和表单,所以我不能使用模板,因为select字段的选项最终是从添加到SQLAlchemy模型和MySQL数据库的值生成的。非常感谢!你让我意识到我不需要
<script id="equipment-template" type="text/x-handlebars-template">
<li id="{{eqLabel}}">
<label for="{{eqLabel}}">Equipment</label>
<select id="{{eqLabel}}" name="{{eqLabel}}">
<option selected value="1">T700</option>
<option value="3">iLink</option>
</select>
</li>
</script>
var equipmentTemplate = $("#equipment-template").html();
var $equipmentTemplate = Handlebars.compile(equipmentTemplate);
var $eqLabel = 'equipment-' + num;
var eqContext = {eqLabel: $eqLabel};
var eqhtml = $equipmentTemplate(eqContext);
$( "#eqblock" ).append( eqhtml );