Javascript 如何在Drupal 7中删除下拉HTML选择列表中禁用的选项

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

我希望遍历一个元素,从列表中删除所有禁用的元素,以便只向用户显示与他们相关的项目。所有这些都发生在Drupal7中,选择列表是从分类术语列表中填充的。我注意到两个问题,但首先这是自定义主题中的javascript文件:

(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();