2012-01-20 190 views
0

我想更新使用jQuery的css屬性,但它不工作。下面我第一次警報的代碼中使用警報帶來了jQuery [對象對象]問題

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)  
      }; 
     }); 
    }); 
+0

有關:使用Javascript - \ [對象的對象\]手段?](http://stackoverflow.com/q/8892465/1048572) – Bergi

回答

3

基本上,這一切都歸結到去過度的頂部上jQuery選擇語法,而不必閱讀文檔,找出哪些選擇怎麼做。

  1. 你爲什麼要包圍$()currValue.replace("down", "up")?這看起來像是嘗試從包含圖像URL的字符串中創建jQuery對象。不要這樣做。任意Javascript代碼不得無故列入$()

  2. 另外,$("currValue:contains('down')")不會做你的想法。該語法用於根據特定標準選擇DOM節點,而不是用於在字符串上實現任意條件語句。 You just want to search within a string

$(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); 
    }); 
}); 
+0

那正是我一直在尋找。我目前正在學習javascript/jQuery,但語法混亂。 – Undefined

+0

@SamWarren:我建議首先自己學習Javascript,然後在適當的時候添加jQuery庫的用法。 –

+0

@SamWarren嘗試不學習jQuery並專注於JavaScript/DOM。 – Raynos

0

警報顯示了[對象的對象]因爲要從字符串通過創建jQuery對象:

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

你應該使用currValue.re放置(「上」,「下」);沒有$()。

而且

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

不正確。這總是返回true,因爲你從傳遞給$()的字符串創建空的jQuery對象。

你應該使用:

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

/up/.test(currValue) 

測試如果字符串中包含一些子。