2015-04-20 4 views
15

вот мой кодУдалить все классы из SVG с помощью JQuery

<!DOCTYPE html> 
<html> 
<body> 
<style>  
    .someClass { 
      fill:gray; 
     } 
</style> 
<svg width="400" height="110"> 
    <rect class="someClass" width="100" height="100"/> 
</svg> 
<svg width="400" height="110"> 
    <rect class="someClass" width="100" height="100"/> 
</svg> 
<svg width="400" height="110"> 
    <rect class="a" width="100" height="100"/> 
</svg> 
</body> 
</html> 

Как удалить все классы (.someClass) нужно удалить только в .someClass в документе без использования идентификатора?

+0

http://stackoverflow.com/questions/8638621/jquery-svg-why-cant-i-addclass – epascarello

+0

Не предоставленные ответы работать для вас? – dsharew

ответ

18

Вы не можете назвать .removeClass() на SVG, к сожалению.

Используйте вместо .attr() вместо.

$('.someClass').attr('class',''); 

дополнительные источники:

Martin Wolf

Similar SO Question

+8

Это, конечно, удалит ** все ** классы. Что хорошо для цитированного HTML, но ... –

+0

Вы можете использовать [форму 'attr', которая принимает функцию] (http://api.jquery.com/attr/#attr-attributeName-function), как второй аргумент. Это даст вам старое значение, и вы можете сделать 'replaceAll()', чтобы удалить его. – GJK

+0

Просто хотел добавить к этому в настоящее время [PR в jquery, чтобы изменить removeClass, чтобы это не было проблемой.] (Https://github.com/jquery/jquery/pull/2465) – aug

7

Это ($('.someClass').attr('class','');) будут удалены все классы всех элементов с классом someClass.


Это должно сделать трюк (сохраняет за собой другие классы):

$(".someClass").each(function(){ 

    var classes = $(this).attr("class").split(" "); 
    var otherClasses = ""; 
    for(var i = 0; i<classes.length; ++i){ 
     if(classes[i] !== "someClass"){ 
      otherClasses += classes[i] + " "; 
     } 
    } 

    $(this).attr("class",otherClasses); 

}); 

Благодаря @xehpuk за его комментарии.

+1

Это не сохранить другие классы, например "SomeClass2". – xehpuk

+0

hmm да, но лучше, чем '$ ('. SomeClass'). Attr ('class', '');' – dsharew

+0

Как насчет обновленного ответа – dsharew

4

Вы можете использовать removeAttr, который найдет все согласованные элементы и удалит данный атрибут.
В вашем случае этот код найдет все элементы с классом someClass и удалит атрибут class.
И в этом коде хорошо, что он не оставит пустой атрибут.

$('.someClass').removeAttr("class"); 
+2

В конкретном случае я думаю, что это на самом деле более корректно, чем ответ с множеством upvotes, потому что это оставит пустой атрибут ... – Shikkediel

+0

И что происходит, если элемент имеет более одного класса? –

+0

@YoannAugen в этом случае этот ответ нецелесообразен, но он удовлетворяет этому вопросу. – chriz

Смежные вопросы