2014-09-29 47 views
2

最近我在做一個傳統項目一些重構對我的工作和我偶然發現了一些「越野車」可能。添加同一類兩次在一個元件上

某處框架內的自定義pageloader讀取端點的controller/action並應用那些其身體上的兩班。

它確實可以說,像這樣:

$('body').removeAttr("class").addClass(controller + ' ' + action); 

隨着index控制器與cars作爲行動的身體看起來像:

$('body').removeAttr("class").addClass('index cars'); 
<body class="index cars"> 

到目前爲止好(不完全)。

後來再搭配你會做特殊元素:

$('.index.cars') 

現在有一個問題,如果動作和控制器具有相同的名稱。 應用的兩個階層,可以說cars/cars看起來像這樣:

<body class="cars cars"> 

的選擇$('.index.cars')正常工作與以上。

現在最有趣的部分是,如果你試圖用jQuery 1.11.1添加的類別,然後這不起作用。它不能在一個元素上添加具有相同名稱的第二個類。

所以這個:

$('body').removeAttr("class").addClass('cars cars'); 
<body class="cars"> 

不起作用:-(

搜索了一下,在谷歌和這裏,但找不到東西

的問題是:

是在一個元素上有兩次相同的類是否有效?如果是,那麼除了用類創建一個選擇器外,有沒有什麼特定的原因會導致這種情況呢?

+0

爲什麼不在'addClass(controller +''+ action);'之前添加一個驗證來檢查名稱是否相同,然後再附加它們。 – emmanuel 2014-09-29 18:57:44

+0

謝謝@emmanuel。我知道如何解決這個問題,但我只是在徘徊...... – 2014-09-29 18:58:36

+2

http://stackoverflow.com/questions/10050851/use-duplicate-class-name-on-an-element – LcSalazar 2014-09-29 19:04:02

回答

1

對元素有多個重複類是有效的。看看這裏的Moz開發人員參考:https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/class

基本上,無論調用它將識別相同元素的兩個實例,但將它視爲一個類。

要回答你的第二個問題爲理由,有人利用這個......我個人不認爲一個人的?

至於你的問題上面,你在你的元素上移除屬性「類」,然後用類值加回來。例如:<div class="car">成爲<div>的話,那就<div class="controller action">

你可以只使用.removeClass更換.removeAttr

在這裏看到:http://api.jquery.com/removeclass/

希望幫助?祝你好運!

相關問題