我有一个jQuery函数,它接收所有字段的值并将它们添加到一个字段中。
正在使用JSfiddle:https://jsfiddle.net/Nashza/cLpa9nob/8/
现在您可以看到jQuery代码中有两个具有不同CSS结构的字段。
因为我具有jQuery的基本知识,所以我不确定如何将jQuery代码转换为可以与多个Inputs一起使用的单个函数,而输入中保存的CSS值是动态的,并且每个输入具有不同的结构。 / p>
例如,第一个输入“ glass-body-css”将具有以下结构:
body {background-color:#f7f7f7;color:#350c0c;padding:0px;} a{color:#05b58c;} a:hover{color:#099b8c;}
而“ glass-header-css”将具有以下结构:
#glassTopHeader {background-color:#0e0093;color:#f7bf18;padding:0px;} #glassTopHeader a{color:#f99339;} #glassTopHeader a:hover{color:#ff0a0a;}
什么是制作干净的1 jQuery代码而不为每个输入重复jQuery代码的最佳解决方案
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
jQuery(document).ready(function($){
$(function(){
$('.copy').on('change keyup', function(){
var bgcolor = $(".bgcolor_body").val();
var textcolor = $(".textcolor_body").val();
var padding = $(".padding_body").val();
var linkcolor = $(".linkcolor_body").val();
var linkhovercolor = $(".linkhovercolor_body").val();
$('.full_body').val( 'body {background-color:' + bgcolor + ';color:' + textcolor + ';padding:' + padding + 'px;} a{color:' + linkcolor + ';} a:hover{color:' + linkhovercolor + ';}');
}).change();
});
const full = $("#currentValue_body").text();
const values = full.match(/body {background-color:([^;]+);color:([^;]+);padding:([^;]+)px;} a{color:([^;]+);} a:hover{color:([^;]+);}/);
if (values) {
$(".full_body").val(full);
$(".bgcolor_body").val(values[1]);
$(".textcolor_body").val(values[2]);
$(".padding_body").val(values[3]);
$(".linkcolor_body").val(values[4]);
$(".linkhovercolor_body").val(values[5]);
}
});
jQuery(document).ready(function($){
$(function(){
$('.copy').on('change keyup', function(){
var bgcolor = $(".bgcolor_head").val();
var textcolor = $(".textcolor_head").val();
var padding = $(".padding_head").val();
var linkcolor = $(".linkcolor_head").val();
var linkhovercolor = $(".linkhovercolor_head").val();
$('.full_head').val( '#glassTopHeader {background-color:' + bgcolor + ';color:' + textcolor + ';padding:' + padding + 'px;} #glassTopHeader a{color:' + linkcolor + ';} #glassTopHeader a:hover{color:' + linkhovercolor + ';}');
}).change();
});
const full = $("#currentValue_head").text();
const values = full.match(/#glassTopHeader {background-color:([^;]+);color:([^;]+);padding:([^;]+)px;} #glassTopHeader a{color:([^;]+);} #glassTopHeader a:hover{color:([^;]+);}/);
if (values) {
$(".full_head").val(full);
$(".bgcolor_head").val(values[1]);
$(".textcolor_head").val(values[2]);
$(".padding_head").val(values[3]);
$(".linkcolor_head").val(values[4]);
$(".linkhovercolor_head").val(values[5]);
}
});
<input type="text" class="bgcolor_body copy color-picker" value="">
<input type="text" class="textcolor_body copy color-picker">
<input type="text" class="linkcolor_body copy color-picker">
<input type="text" class="linkhovercolor_body copy color-picker">
<input type="range" class="padding_body copy rangeslider" value="" step="1" min="0" max="100">
<input type="text" name="glass-body-css" id="glass-body-css" value="" data-alpha="true" data-default-color="" class="full_body" style="width:100%;"/><br>
<strong>current Value: </strong><span id="currentValue_body">body {background-color:#f7f7f7;color:#350c0c;padding:0px;} a{color:#05b58c;} a:hover{color:#099b8c;}</span>
<input type="text" name="glass-top-header-color" id="glass-top-header-color" data-alpha="true" data-default-color="" class="bgcolor_head copy color-picker" value="">
<input type="text" name="glass-top-header-text-color" id="glass-top-header-text-color" data-alpha="true" data-default-color="" class="textcolor_head copy color-picker">
<input type="text" name="glass-top-header-link-color" id="glass-top-header-link-color" data-alpha="true" data-default-color="" class="linkcolor_head copy color-picker">
<input type="text" name="glass-top-header-link-hover-color" id="glass-top-header-link-hover-color" data-alpha="true" data-default-color="" class="linkhovercolor_head copy color-picker">
<input type="range" name="glass-padding" class="padding_head copy rangeslider" value="" step="1" min="0" max="100">
<input type="text" name="glass-header-css" id="glass-header-css" value="" data-alpha="true" data-default-color="" class="full_head" style="width:100%;"/><br>
<strong>current Value: </strong><span id="currentValue_head">#glassTopHeader {background-color:#0e0093;color:#f7bf18;padding:0px;} #glassTopHeader a{color:#f99339;} #glassTopHeader a:hover{color:#ff0a0a;}</span>
答案 0 :(得分:0)
以下应该为您提供一个良好的开端。这里发生了很多事情,因此可能并不完美
对于初学者,请将每个集合包装在一个容器中,并使用容器上的数据属性来存储每个集合中常见的变量
在这种情况下,我可以添加一个type
和selector
然后在各种jQuery选择器以及存储适当正则表达式的新对象type
中使用matches
。 selector
用于打印样式规则
然后在事件处理程序中,您查找父容器以从数据属性中获取变量
var matches = {
body: /body {background-color:([^;]+);color:([^;]+);padding:([^;]+)px;} a{color:([^;]+);} a:hover{color:([^;]+);}/,
head: /#glassTopHeader {background-color:([^;]+);color:([^;]+);padding:([^;]+)px;} #glassTopHeader a{color:([^;]+);} #glassTopHeader a:hover{color:([^;]+);}/
}
jQuery(function($) {
$('.copy').on('change keyup', function() {
var $row = $(this).closest('.input-row'),
type = $row.data('type'),
selector = $row.data('selector')
var bgcolor = $(".bgcolor_" + type).val();
var textcolor = $(".textcolor_" + type).val();
var padding = $(".padding_" + type).val();
var linkcolor = $(".linkcolor_" + type).val();
var linkhovercolor = $(".linkhovercolor_" + type).val();
$('.full_' + type).val(selector + '{background-color:' + bgcolor + ';color:' + textcolor + ';padding:' + padding + 'px;} a{color:' + linkcolor + ';} a:hover{color:' + linkhovercolor + ';}');
}).change();
// loop over each instance to set values
$('.input-row').each(function() {
var type = $(this).data('type')
const full = $("#currentValue_" + type).text();
// use the type from data attribute to get regex
const values = full.match(matches[type]);
if (values) {
$(".full_" + type).val(full);
$(".bgcolor_" + type).val(values[1]);
$(".textcolor_" + type).val(values[2]);
$(".padding_" + type).val(values[3]);
$(".linkcolor_" + type).val(values[4]);
$(".linkhovercolor_" + type).val(values[5]);
}
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="input-row" data-type="body" data-selector="body">
<input type="text" class="bgcolor_body copy color-picker" value="">
<input type="text" class="textcolor_body copy color-picker">
<input type="text" class="linkcolor_body copy color-picker">
<input type="text" class="linkhovercolor_body copy color-picker">
<input type="range" class="padding_body copy rangeslider" value="" step="1" min="0" max="100">
<input type="text" name="glass-body-css" id="glass-body-css" value="" data-alpha="true" data-default-color="" class="full_body" style="width:100%;" /><br>
<strong>current Value: </strong><span id="currentValue_body">body {background-color:#f7f7f7;color:#350c0c;padding:0px;} a{color:#05b58c;} a:hover{color:#099b8c;}</span>
</div>
<div class="input-row" data-type="head" data-selector="#glassTopHeader">
<input type="text" name="glass-top-header-color" id="glass-top-header-color" data-alpha="true" data-default-color="" class="bgcolor_head copy color-picker" value="">
<input type="text" name="glass-top-header-text-color" id="glass-top-header-text-color" data-alpha="true" data-default-color="" class="textcolor_head copy color-picker">
<input type="text" name="glass-top-header-link-color" id="glass-top-header-link-color" data-alpha="true" data-default-color="" class="linkcolor_head copy color-picker">
<input type="text" name="glass-top-header-link-hover-color" id="glass-top-header-link-hover-color" data-alpha="true" data-default-color="" class="linkhovercolor_head copy color-picker">
<input type="range" name="glass-padding" class="padding_head copy rangeslider" value="" step="1" min="0" max="100">
<input type="text" name="glass-header-css" id="glass-header-css" value="" data-alpha="true" data-default-color="" class="full_head" style="width:100%;" /><br>
<strong>current Value: </strong><span id="currentValue_head">#glassTopHeader {background-color:#0e0093;color:#f7bf18;padding:0px;} #glassTopHeader a{color:#f99339;} #glassTopHeader a:hover{color:#ff0a0a;}</span>
</div>