2012-07-19 41 views
0
var first = $('#one, #two, #three'); 
var second = $('#six, #seven, #eight'); 

現在,我想用$.merge()合併選擇並隱藏它們。

var merged = $.merge(first, second); 
merged.hide(); // works, but alters "first" 

因爲我後來不得不單獨重用first選擇,我試圖複製合併。

var merged = $.merge($.merge([], first), second); 
merged.hide(); // = 
// = Uncaught TypeError: Object [object HTMLDivElement], [object HTMLDivElement], [,...] has no method 'hide' 

錯誤很明顯 - 元素失去了jQuery關聯。

  1. 我是否跳過關於選擇分組/合併的課程?
  2. $(merged).hide();唯一的解決方案?
  3. 爲什麼copy-merge會丟棄jQuery?

回答

2

你不需要.merge(),使用.add()代替:

var combined = first.add(second); 
      // ^----will not be affected 
combined.hide(); 
+0

「我跳過了關於選擇分組/合併的課程嗎?」哦,是的,我有。謝謝! – jolt 2012-07-19 11:17:32

1

合併的文檔說它通過添加秒的值來改變第一個對象。 我相信你需要將它複製這樣的:$.merge($.merge($(), first), second)

或者你可以用切片:

$.merge(first.slice(0), second)

+0

' $ .merge($ .merge($(),first),second);'做到了。 – jolt 2012-07-19 11:18:59