Javascript jQuery对象和循环的问题
我现在正在创建一个jQuery插件,它将Javascript jQuery对象和循环的问题,javascript,jquery-plugins,dom-manipulation,jquery,Javascript,Jquery Plugins,Dom Manipulation,Jquery,我现在正在创建一个jQuery插件,它将变成了一个非常漂亮的下拉菜单,不过我有一点问题,我可以通过这样做在页面上获得选择的选项 var self = $(this); name = self.attr('name'); select_options = $(this).children(); // an array so that we can related options together sorted_options = []; //loop thr
变成了一个非常漂亮的下拉菜单,不过我有一点问题,我可以通过这样做在页面上获得选择的选项
var self = $(this);
name = self.attr('name');
select_options = $(this).children();
// an array so that we can related options together
sorted_options = [];
//loop through the options sorting them into the array as we go.
for(i=0;select_options.length>i;i++) {
sorted_options.push({
'value': select_options.eq(i).val(),
'name': select_options.eq(i).text()
});
}
因此,我获取选项,然后将它们排序到一个数组中,当我将这个数组推到控制台时,我得到以下结果:
[Object { value="0", name="I'm looking for..."}, Object { value="1", name="actors"}, Object { value="2", name="presenters"}, Object { value="3", name="voice overs"}]
[Object { value="0", name="Skill"}, Object { value="1", name="actors"}, Object { value="2", name="presenters"}, Object { value="3", name="voice overs"}, Object { value="4", name="dancers"}, Object { value="5", name="accents"}, Object { value="6", name="film"}, Object { value="7", name="tv"}]
[Object { value="0", name="Gender"}, Object { value="1", name="male"}, Object { value="2", name="female"}]
options.splice(0, 1);
我的第一个问题是如何从数组中删除所有值为0的内容,因为如果用户告诉我,我的插件将替换下拉列表中的第一个条目。在我对如何获得选项进行一些更改之前,我使用了以下方法
[Object { value="0", name="I'm looking for..."}, Object { value="1", name="actors"}, Object { value="2", name="presenters"}, Object { value="3", name="voice overs"}]
[Object { value="0", name="Skill"}, Object { value="1", name="actors"}, Object { value="2", name="presenters"}, Object { value="3", name="voice overs"}, Object { value="4", name="dancers"}, Object { value="5", name="accents"}, Object { value="6", name="film"}, Object { value="7", name="tv"}]
[Object { value="0", name="Gender"}, Object { value="1", name="male"}, Object { value="2", name="female"}]
options.splice(0, 1);
但是选项已经不存在了,所以我不能只删除每个数组的第一个条目,其次我需要将值和名称附加到新的下拉列表中,但是我在这方面遇到了问题
我现在用这段代码来附加值
for(i=0;sorted_options.length>i;i++) {
$('.dropdown dd ul').append('<li <a href="#"><span class="option">'+ sorted_options[i]['value'] + '</span><span class="value">' + sorted_options[i]['name'] + '</span></a></li>');
}
for(i=0;排序的_选项.length>i;i++){
$('.dropdown dd ul')。append('您可以从列表中筛选,所有具有值的对象都以这种方式等于0:
/**
* Remove from a list all object having `obj.value` == value (ex. 0).
*
* @param {Object} value The value to avoid.
* @param {Array:Object} A list of objects.
* @return {Array:Object} The new filtered Array.-*emphasized text*
*/
function filterByValue(value, list) {
var newlist = [],
obj,
max,
i;
for (i = 0, max = list.length; i < max; i += 1) {
obj = list[i];
if (obj.value !== value) {
newlist.push(obj);
}
}
}
var newList = filterByValue(0, list);
然后,您必须将右侧的选项
列表附加到相应的选择
var uls = document.getElementsByClassName("dropdown").
.getElementsByTagName("dd").
.getElementsByTagName("ul");
for (var i = 0, max = uls.length; i < max; i += 1) {
ul = uls[i];
sortedOptions = sortedOptions[i];
ul.innerHTML = '<li <a href="#"><span class="option">'+ sortedOptions[i]['value'] + '</span><span class="value">' + sortedOptions[i]['name'] + '</span></a></li>';
}
var-uls=document.getElementsByClassName(“下拉列表”)。
.getElementsByTagName(“dd”)。
.getElementsByTagName(“ul”);
对于(var i=0,max=uls.length;i ul.innerHTML='对于第一个问题,可以使用函数筛选数组的元素
var filteredArray = $.grep(rawArray, function(v,i) {
return (v.value === '0' ? null : v);
});
对于你的第二个问题,我可能会使用以下方法(如果我理解正确的话):
var模板=$(
“”
),dropdown=$('.dropdown dd ul');
//请注意,$.grep和$.的参数都是反向的
$。每个(过滤器阵列,函数(i,v){
//将第(i)个对象添加到第(i)个下拉列表中
下拉式.eq(i).追加(
template.clone()
.find('.option').text(v.value).end()
.find('.value).text(v.name).end()
);
});
所以基本上:
jQuery内置了过滤和迭代原始JS数组的功能
缓存要插入到DOM中的HTML模板(这样jQuery就不必在每次将其添加到文档时都进行整个“选择”过程)
出于同样的原因,也缓存下拉选择
非常感谢您的回答,我已经实现了它,但是我无法让它正常工作,我已经创建了一个JSFIDLE,您可以在这里看到,