为什么.attr()工作正常并且设置.src不是

时间:2014-02-05 12:28:08

标签: javascript

我有两个版本的od代码, 这个不起作用:

 $('#customMenu > li > a').click(function()
            {
                if ($(this).attr('class') != 'active')
                {
                    $('#customMenu li img').each(function() {

                         $(this).src='/_layouts/GAzotyBranding/Images/menuUnselected.png';
                    });
                    var image = this.previousSibling;
                    image.attr('src','/_layouts/GAzotyBranding/Images/menuSelected.png');

                    $('#customMenu li ul').slideUp();
                    $(this).next().slideToggle();
                    $('#customMenu li a').removeClass('active');
                    $(this).addClass('active');
                }
           });

这个工作正常:

$('#customMenu > li > a').click(function()
            {
                if ($(this).attr('class') != 'active')
                {
                    $('#customMenu li img').each(function() {
                        $(this).attr('src','/_layouts/GAzotyBranding/Images/menuUnselected.png');

                    });
                    var image = this.previousSibling;
                    image.src='/_layouts/GAzotyBranding/Images/menuSelected.png';
                    $('#customMenu li ul').slideUp();
                    $(this).next().slideToggle();
                    $('#customMenu li a').removeClass('active');
                    $(this).addClass('active');
                }
           });

唯一的区别在于

$('#customMenu li img').each(function() {
                        $(this).attr('src','/_layouts/GAzotyBranding/Images/menuUnselected.png');

我的问题很简单,为什么第一个不起作用?

2 个答案:

答案 0 :(得分:1)

因为在这两种情况下你都使用jQuery包装器包装原始DOM节点,所以你只需要在非DOM对象上设置一些属性。

要完成第一项工作,您需要this.src = '...';,因为this将指向原始DOM元素。

答案 1 :(得分:0)

因为在jQuery对象上设置src属性根本不起作用。它没有明确的行为,也没有注意它。 jQuery对象不是DOM对象。

使用this.src代替$(this).src会有效。