jQuery [object Object]问题

时间:2012-01-20 13:41:29

标签: javascript jquery

我想使用jQuery更新css属性,但它无法正常工作。使用下面代码中的警报我的第一个警报会显示

url("file:///H:/Web/example/HTML/images/red-arrow-up.png")

然后第二个警报(在if语句中)显示

[object Object]

但我想要它做的是更新属性并在网址中更改为向下。知道我做错了什么吗?

    $(document).ready(function() {
        $( ".portlet-header" ).click(function() {
            var currValue = $(this).children(".portlet-arrow").css("background-image");
            alert (currValue)
            if ($("currValue:contains('up')"))  {
                var newValue = $(currValue.replace("up", "down"));
                alert(newValue)
                $(this).children(".portlet-arrow").css("background-image", newValue)    
            };
            if ($("currValue:contains('down')"))    {
                var newValue = $(currValue.replace("down", "up"));
                alert(newValue)
                $(this).children(".portlet-arrow").css("background-image", newValue)    
            };
        });
    });

2 个答案:

答案 0 :(得分:3)

这基本上都归结为jQuery选择器语法的过分,而没有阅读文档以找出选择器实际执行的操作。

  1. 为什么你围绕currValue.replace("down", "up")中的$()?这看起来像是尝试从包含图像URL的字符串中创建jQuery对象。不要那样做。任意Javascript代码不会被$()无理由包围。

  2. 此外,$("currValue:contains('down')")没有按照您的想法行事。该语法用于基于特定条件选择DOM节点,而不是用于在字符串上实现任意条件语句。 You just want to search within a string

  3. $(document).ready(function() {
        $(".portlet-header").click(function() {
            var currValue = $(this).children(".portlet-arrow").css("background-image");
            alert(currValue);
            if (currValue.indexOf('up') != -1) {
                var newValue = currValue.replace("up", "down");
                alert(newValue);
                $(this).children(".portlet-arrow").css("background-image", newValue);
            }
            if (currValue.indexOf('down') != -1) {
                var newValue = currValue.replace("down", "up");
                alert(newValue);
                $(this).children(".portlet-arrow").css("background-image", newValue);
            }
        });
    });
    

    可以进一步改进代码:

    $(function() {
        $(".portlet-header").click(function() {
    
            var currValue = $(this).children(".portlet-arrow").css("background-image");
            alert(currValue);
    
            if (currValue.indexOf('up') != -1) {
                var newValue = currValue.replace("up", "down");
            }
            else if (currValue.indexOf('down') != -1) {
                var newValue = currValue.replace("down", "up");
            }
            else {
                return;
            }
    
            alert(newValue);
            $(this).children(".portlet-arrow").css("background-image", newValue);
        });
    });
    

答案 1 :(得分:0)

警报显示[object Object],因为您正在通过以下方式从字符串创建jQuery对象:

$(currValue.replace("up", "down"));

你应该使用currValue.replace(“up”,“down”);没有$()。

另外

if ($("currValue:contains('up')")) {

不正确。这总是返回true,因为你从传递给$()的字符串创建空的jQuery对象。

您应该使用:

currValue.indexOf('up') !== -1 

/up/.test(currValue)

测试字符串是否包含某些子字符串。