我使用了很多select2插件,我想从相关元素的数据属性中分配插件的选项和选项值,如下所示;
HTML
<select data-plug="select2" data-plug-op='{"placeholder":"text1","containerCssClass":"maincss"}'>
<option></option>
</select>
<select data-plug="select2" data-plug-op='{"placeholder":"text2","containerCssClass":"maincss2","dropdownCssClass":"dropdowncss"}'>
<option></option>
</select>
JS
var slc = $('[data-plug="select2"]');
assignSelect(slc);
function assignSelect(selectElement) {
selectElement.each(function(){
var $this = $(this),
plugOp = $.parseJSON( $this.attr('data-plug-op') );
/*-- --*/
$.each(plugOp,function(k,v){
$this.select2({
k:v
});
});
/*-- --*/
});
}
我从相关元素的数据属性中获取选项并将其解析为JSON,但我无法分配给插件。我怎么能这样做?
答案 0 :(得分:1)
可能我找到了解决问题的方法
在这个Fiddle中,两个选项的属性data-plug-op用于构建插件select2对象。
因为在这种情况下我不知道maincss和maincss2我使用宽度和占位符来区分这两个选项
代码似乎工作的第一个选项有一个占位符=&#34; text1&#34;宽度为200
第二个选项有一个占位符=&#34; text2&#34;和宽度= 400
您需要的所有jQuery代码都是
<script type="text/javascript">
$(document).ready(function() {
$.each($('[data-plug="select2"]'),function(index){
obj={}
var $this = $(this),
plugOp = $.parseJSON( $this.attr('data-plug-op') );
for(prop in plugOp) {
obj[prop]=plugOp[prop]
}
$('[data-plug="select2"]:eq('+index+')').select2( $.extend({}, obj))
})
});
</script>
获得相同结果的更为明智的方法是this Fiddle 我使用一点css来区分两个选项组
<script type="text/javascript">
$(document).ready(function() {
$.each($('[data-plug="select2"]'),function(index){
var $this = $(this)
var plugOp = $.parseJSON( $this.attr('data-plug-op') );
$('[data-plug="select2"]:eq('+index+')').select2(plugOp)
})
});
</script>
最后的解决方案可能是
(但为了简洁起见,我更喜欢第二种解决方案)
<script type="text/javascript">
$(document).ready(function() {
var slc = $('[data-plug="select2"]');
assignSelect(slc);
function assignSelect(selectElement) {
selectElement.each(function(){
var $this = $(this),
plugOp = $.parseJSON($this.attr('data-plug-op'));
$this.select2(plugOp);
});
}
});
</script>
答案 1 :(得分:0)
尝试下面的代码,
function assignSelect(selectElement) {
selectElement.each(function(){
var $this = $(this),
plugOp = $.parseJSON( $this.attr('data-plug-op') );
/*-- --*/
$.each(plugOp,function(k,v){
$this.select2().data('placeholder', plugOp.placeholder).select2({
formatNoMatches: function (term) {
return 'no match "' + term + '" item';
},
allowClear: true,
containerCssClass : plugOp.containerCssClass,
dropdownCssClass: plugOp.dropdownCssClass
});
});
/*-- --*/
});
}
答案 2 :(得分:0)
您只需将功能修改为:
function assignSelect(selectElement) {
selectElement.each(function(){
var $this = $(this),
plugOp = $.parseJSON($this.data('plug-op'));
$this.select2(plugOp); // select2 accepts object as options, which plugOp is
});
}