2010-05-25 65 views
1

我在jQuery中遇到了.removeClass().addClass()的一些奇怪問題。爲什麼jQuery爲類屬性添加一個空格?

具體來說,當我使用.removeClass()時,該類確實被刪除,但是留下了一個空格。那麼當我.addClass("secondclass")我得到class=" secondclass"(與前面的空間)。

我使用jQuery 1.4.1

這是預期的行爲或錯誤?如何阻止它?

UPDATE:

有些人問這是導致什麼問題。好吧,我使用變薄:

$("img.someclass").click(function() { 

我用Firefox 3.6.3

測試這種不與在類名的前面的空間觸發。當我手動刪除它的工作正常的空間。 似乎這個問題比空間問題還要多,而且很可能這個空間並沒有引起任何問題(很高興它已經消失了); - 會就持續的問題發佈單獨的問題。

+4

這是造成問題嗎? – spender 2010-05-25 10:28:06

+0

@spender - 它似乎是,但也許這是我錯誤地歸因於此的另一個問題。我會檢查出來並回到這裏。 – UpTheCreek 2010-05-25 10:31:36

+0

我檢查過了,是的,它似乎是罪魁禍首 - 看到我的更新。 – UpTheCreek 2010-05-25 10:46:20

回答

2

這是jQuery的1.4.1版本的bug,但這種固定在jQuery的1.4.2版本。如果你想停止這種行爲,你可以使用最新版本。

+0

更新至1.4.2,並且可以確認空間已經消失。謝謝。 – UpTheCreek 2010-05-25 11:01:17

7

由於多個類別之間用空格delimeted:

<div class="class1 class2 class3">...</div> 

它更容易在特殊條件下添加一個空格,而不是代碼。在上面,你可以簡單地用""更換"class3",如果你想刪除它,將其更改爲:

<div class="class1 class2 ">...</div> 

否則,你不必擔心它是否是第一類或不作爲是否要離開班級存在。另外,您的標記可能會在那裏放置多個空間(有意或無意)。

+0

我知道課堂是由空間隔開的,但是單個課堂前面的空間並不常見。當然,這並不需要太多的代碼來檢查這種情況。如果它不是一個錯誤,它有點草率。 – UpTheCreek 2010-05-25 11:00:58

+1

@Sosh它不是無效的,所以當有人使用Firebug檢查結果時,你會爲案件添加額外的處理。不是一個高度優先的用例。 – cletus 2010-05-25 12:09:06

+0

是的,我想是的。無論如何,事實證明,這不是造成根本問題的原因。謝謝 – UpTheCreek 2010-05-25 12:14:16

1

@cletus解釋,但你可以使用jQuery的$.trim功能把空格去掉過,雖然我不知道你爲什麼要這麼做:

$('selector').attr('class', $.trim($('selector').attr('class')); 

更新:

你可以做像這樣:

var class = $('selector').attr('class', $.trim($('selector').attr('class')); 

$("img." + class).click(function() { 
    // your code...... 
}); 
+0

該空間正在引起我的問​​題 - 請參閱更新。我會看看這個作爲替代。謝謝。 – UpTheCreek 2010-05-25 10:49:27

+0

@Sosh:請看我最新的答案。 – Sarfraz 2010-05-25 10:55:58

1

這是因爲jQuery是一個編碼很差的庫,不應該使用它。在這裏,我已經寫了另一對實際工作:

function addClass(node, name) { 
    node.className += (node.className ? ' ' : '') + name; 
} 
function removeClass(node, name) { 
    node.className = node.className. 
    split(' ' + name).join(''). 
    split(name).join(''); 
} 
+0

問題不在於他們不工作。沒有課程時,問題在於幻影空間。不知道爲什麼你不應該使用jQuery,如果它是適當的,我從來沒有任何問題,說實話。 – 2010-05-25 10:33:19

+0

掛上...你是說上面的代碼在我的答案*不工作?它的工作原理,比用於OP的目的的jQuery代碼更好 - 只有當其他人存在時纔會插入領先。它還可以刪除/不加空格 - 這意味着不會留下任何空格。 – 2010-05-25 10:37:36

+0

不,我不是說你的代碼不工作。我不知道你從哪裏得到這個想法。 – 2010-05-25 14:00:01

相關問題