Javascript 如何在Drupal 7中删除下拉HTML选择列表中禁用的选项
我希望遍历一个元素,从列表中删除所有禁用的元素,以便只向用户显示与他们相关的项目。所有这些都发生在Drupal7中,选择列表是从分类术语列表中填充的。我注意到两个问题,但首先这是自定义主题中的javascript文件:Javascript 如何在Drupal 7中删除下拉HTML选择列表中禁用的选项,javascript,jquery,drupal,drupal-7,Javascript,Jquery,Drupal,Drupal 7,我希望遍历一个元素,从列表中删除所有禁用的元素,以便只向用户显示与他们相关的项目。所有这些都发生在Drupal7中,选择列表是从分类术语列表中填充的。我注意到两个问题,但首先这是自定义主题中的javascript文件: (function($) { Drupal.behaviors.mytheme = { attach: function(context, settings) { var x = document.ge
(function($)
{
Drupal.behaviors.mytheme =
{
attach: function(context, settings)
{
var x = document.getElementById("edit-field-diplomatic-mission-und");
for (var j = 0; j < 10; j++) //Force loop
{
for (var i = 0; i < x.length; i++)
{
if (x.options[i].disabled == true)
{
x.remove(i);
}
}
}
}
};
})(jQuery);
循环不会遍历整个列表,而是在第21个或第25个选项附近随机中断。这就是为什么我在代码中有一个强制循环
在Drupal中,禁用的元素根本不会被删除
请注意,在其独立格式下,相同的代码可以在整个列表中删除元素,而无需循环:
<script>
$(document).ready(function ()
{
var x = document.getElementById("edit-field-diplomatic-mission-und");
for (var j = 0; j < 10; j++)
{
for (var i = 0; i < x.length; i++)
{
if (x.options[i].disabled == true)
{
x.remove(i);
}
}
}
});
</script>
请问我做错了什么?问题是您正在删除影响选项集合长度的选项,该集合长度是活动节点列表。你可以向后循环。这是删除所有禁用选项的正确代码:
var x = document.getElementById("edit-field-diplomatic-mission-und");
for (var i = x.options.length - 1; i >= 0; i--) {
if (x.options[i].disabled) {
x.remove(i);
}
}
或
一般来说,x.length没有意义,因为x是一个单独的domeElement,而不是一个集合
最后,由于您使用的是jQuery,因此您肯定应该使用它:
$('#edit-field-diplomatic-mission-und option:disabled').remove();
如果使用Jquery:$“选择选项:禁用”。removeI不确定是否需要执行此操作。为什么需要删除或删除禁用的选项?我的理解是,你有一个列表显示给用户,你不想显示一些值。请详细说明$'edit-field-Foreign-mission-und option:disabled'。删除;听起来很不错,但它不起作用。其他循环也是如此。对于var i=x.options.length-1;i>=0;i-在整个选项列表中循环确定。是的,我在DOM就绪时运行脚本。我甚至尝试过x.options[I].getAttributedisabled,但这会返回nullPost一个有问题的演示。包括你正在处理的HTML。让我们。
$('#edit-field-diplomatic-mission-und option:disabled').remove();