0

我刚刚开始学习如何使用 jquery,并且我有这段代码应该对我的下拉项目进行分组,无论它是“员工”还是“组”,但输出不是我想要的。请帮忙。提前致谢

我的代码:

var selectControl = document.getElementById('MainContent_DropDownList1');
var item;

var EmployeesGRP = jQuery('<optgroup/>');
var GroupsGRP = jQuery('<optgroup/>');

EmployeesGRP .attr('label', 'Employees');
GroupsGRP .attr('label', 'Groups');

jQuery('option', selectControl).each(function (i) {
    item = jQuery(this);

    if (item.attr("class") == 'Employees') {
        item.wrapAll(EmployeesGRP );
    }
    else {
        item.wrapAll(GroupsGRP);
    }

});

结果是:

Employees
  Employee number one
Employees
  Employee number two
Groups
  Group number one
Groups
  Group number two

代替:

Employees
  Employee number one
  Employee number two
Groups
  Group number one
  Group number two
4

2 回答 2

1

您需要使用 .appendTo() 而不是 .wrapAll()

var selectControl = $('#MainContent_DropDownList1')

var EmployeesGRP = jQuery('<optgroup/>', {
    label:'Employees'
}).appendTo(selectControl);
var GroupsGRP = jQuery('<optgroup/>', {
    label:'Groups'
}).appendTo(selectControl);

jQuery('option', selectControl).each(function (i) {
    var item = jQuery(this);

    if (item.hasClass("Employees")) {
        item.appendTo(EmployeesGRP );
    } else {
        item.appendTo(GroupsGRP);
    }
});

演示:小提琴

于 2013-05-09T09:32:40.593 回答
1

而不是这个:

item.wrapAll(EmployeesGRP);

你需要这样做:

item.appendTo(EmployeesGRP);

Wrap all 会将EmployeesGRP 包裹在匹配元素集中的每个项目周围,因为您在这里使用了 each 循环。因此,您可以只附加项目,而不是每次都包装。

于 2013-05-09T09:33:55.667 回答