使用jQuery来确定元素的类

时间:2010-10-08 20:49:39

标签: javascript jquery

我可以找到的大多数示例显示如何使用属性显示如何设置它们而不是如何检索它们。在我的例子中,我试图得到一个类,然后解析它以确定它的父值。

HTML:

<select class='parent' name='parent' size='10'>
    <option value='1'>Category 1 -></option>
    <option value='2'>Category 2 -></option>
</select>

<select class='child' id='child' size='10'>
    <option class='sub_1' value='5'>Custom Subcategory 1.1</option>
    <option class='sub_1' value='3'>Subcategory 1.1</option>
    <option class='sub_2' value='4'>Subcategory 2.1</option>
</select>

对于子列表中的任何给定选项,我需要查看class属性,解析名称以查找数字(“sub_ [n]”),然后获取父列表中选项的值。 / p>

到目前为止我的代码(在我的测试用例中,childVal的值为“5”):

var class = child.find("option[value=" + childVal + "]").attr("class");

上面的类变量回来了“未定义。”我知道.find正在工作,因为我可以将它用于其他事情。问题在于获得班级名称。

获得课程名称后,我可以删除“sub_”以获取身份证号码。

有更好的方法吗?为什么.attr(“class”)返回undefined?

这是一个虚构的链接http://jsfiddle.net/n6dZp/8/到一个破碎的例子。

谢谢,

瑞克

这是我正在进行的全部功能。这是一个级联选择列表。

<script type="text/javascript">
    function cascadeSelect(parent, child, childVal) {
        var childOptions = child.find('option:not(.static)');
        child.data('options', childOptions);

        parent.change(function () {
            childOptions.remove();
            child
                    .append(child.data('options').filter('.sub_' + this.value))
                    .change();
        })

        childOptions.not('.static, .sub_' + parent.val()).remove();

        if (childVal != '') {
            var className = child.find("option[value=" + childVal + "]").attr("class"); 

            ** need code here to select the parent and the child options based
            on childVal **
        }
    }

    $(function () {
        $('.categoryform').find('.child').change(function () {
            if ($(this).val() != null) {
                $('.categoryform').find('#CategoryId').val($(this).val());
            }
        });
    });

    $(function () {
        cascadeForm = $('.categoryform');
        parentSelect = cascadeForm.find('.parent');
        childSelect = cascadeForm.find('.child');

        cascadeSelect(parentSelect, childSelect, "5");
    });
</script>

5 个答案:

答案 0 :(得分:3)

class是Javascript中的保留字,因此您不能拥有该名称的变量。尝试

var className = child.find("option[value=" + childVal + "]").attr("class");

答案 1 :(得分:3)

不要将class用作变量名。杀死IE。

这会有效,但是什么是子变量等于?

答案 2 :(得分:2)

获取类属性:

var classAttribute =  $('#child').find('option[value="' + childVal + '"]:first').attr('class');

要获取'n'值,您可以使用RegEx解析class属性:

var nValue = /\bsub_([\S]*)\b/.exec( classAttribute )[1];

希望它对你有所帮助。

答案 3 :(得分:1)

道歉,我一开始并没有仔细阅读你的问题。以下是我应该做的事情:

var parentVal = $('.child option[value=' + childVal + ']').attr('class').substr(4);

OLD ANSWER

这应该适合你:

$(function() {
    $('#child').change(function() {  $('.parent').val($(this).children(':selected').attr('class').substr(4));
    });
});

这是一个现场演示:http://jsfiddle.net/n6dZp/

答案 4 :(得分:0)

首先,你错过了$

你需要:

var class = $(".child").find("option[value=" + childVal + "]").attr("class");