जवाबों:
एक वर्ग जोड़ने के लिए element.classList.add का उपयोग करें :
element.classList.add("my-class");
और element.classList.remove को हटाने के लिए एक वर्ग:
element.classList.remove("my-class");
className
तत्व की संपत्ति में अपने नए वर्ग के नाम के अलावा एक स्थान जोड़ें । सबसे पहले, एक id
तत्व डालें, ताकि आप आसानी से एक संदर्भ प्राप्त कर सकें।
<div id="div1" class="someclass">
<img ... id="image1" name="image1" />
</div>
फिर
var d = document.getElementById("div1");
d.className += " otherclass";
अंतरिक्ष से पहले ध्यान दें otherclass
। अंतरिक्ष को शामिल करना महत्वपूर्ण है अन्यथा यह मौजूदा वर्गों से समझौता करता है जो वर्ग सूची में इसके पहले आते हैं।
MDN पर element.className भी देखें ।
बिना किसी फ्रेमवर्क के ऐसा करने का सबसे आसान तरीका है एलिमेंट .classList.add मेथड।
var element = document.getElementById("div1");
element.classList.add("otherclass");
संपादित करें: और यदि आप किसी तत्व से कक्षा हटाना चाहते हैं -
element.classList.remove("otherclass");
मैं किसी भी खाली जगह और डुप्लिकेट प्रविष्टि को खुद से जोड़ना पसंद नहीं करता हूं (जो document.className
दृष्टिकोण का उपयोग करते समय आवश्यक है )। कुछ ब्राउज़र सीमाएँ हैं , लेकिन आप पॉलीफ़िल का उपयोग करके उनके आसपास काम कर सकते हैं ।
अपने लक्ष्य तत्व को खोजें "d" हालाँकि आप चाहें और फिर:
d.className += ' additionalClass'; //note the space
आप पूर्व-अस्तित्व की जांच करने के लिए और अंतरिक्ष आवश्यकताओं आदि के लिए जाँच करने के लिए चतुर तरीकों में लपेट सकते हैं।
split
व्हॉट्सएप पर क्लासनाम, आप जिसके परिणामस्वरूप सरणी से नहीं चाहते हैं, उसे हटा दें, फिर फिर join
से सरणी ... या उपयोग करें element.classList.remove
।
क्रॉस संगत
निम्न उदाहरण में हम एक जोड़ने classname
के लिए <body>
तत्व। यह IE-8 संगत है।
var a = document.body;
a.classList ? a.classList.add('classname') : a.className += ' classname';
यह निम्नलिखित के लिए आशुलिपि है।
var a = document.body;
if (a.classList) {
a.classList.add('wait');
} else {
a.className += ' wait';
}
प्रदर्शन
यदि क्रॉस-कम्पैटिबिलिटी से अधिक आपके प्रदर्शन का संबंध है तो आप इसे निम्न प्रकार से छोटा कर सकते हैं जो 4% तेज है।
var z = document.body;
document.body.classList.add('wait');
सुविधा
वैकल्पिक रूप से आप jQuery का उपयोग कर सकते हैं लेकिन परिणामी प्रदर्शन काफी धीमा है। JsPerf के अनुसार 94% धीमा
$('body').addClass('wait');
प्रदर्शन
यदि आपके प्रदर्शन से संबंधित है तो किसी वर्ग को हटाने के लिए jQuery का चयन करना सबसे अच्छा तरीका है
var a = document.body, c = ' classname';
$(a).removeClass(c);
JQuery के बिना यह 32% धीमा है
var a = document.body, c = ' classname';
a.className = a.className.replace( c, '' );
a.className = a.className + c;
Element("document.body").ClassNames.add("classname")
Element("document.body").ClassNames.remove("classname")
Element("document.body").ClassNames.set("classname")
YAHOO.util.Dom.hasClass(document.body,"classname")
YAHOO.util.Dom.addClass(document.body,"classname")
YAHOO.util.Dom.removeClass(document.body,"classname")
a.classList ? ...
) में सामान्य एक ( if (a.classList) { ....
) की तुलना में कोई गति अंतर होगा ?
classList.remove()
। आपने इसका उपयोग क्यों नहीं किया? यह jQuery के jsperf.com/remove-class-vanilla-vs-jquery
classList
कक्षाओं को हटाने के लिए छोड़कर सब कुछ करता था, यही कारण है कि मैं इसे पूछ रहा हूं।
शुद्ध जावास्क्रिप्ट का उपयोग करके कक्षा को जोड़ने के लिए एक और दृष्टिकोण
वर्ग जोड़ने के लिए:
document.getElementById("div1").classList.add("classToBeAdded");
कक्षा हटाने के लिए:
document.getElementById("div1").classList.remove("classToBeRemoved");
जब मैं जो काम कर रहा हूं, वह पुस्तकालय का उपयोग करके वारंट नहीं करता है, तो मैं इन दो कार्यों का उपयोग करता हूं:
function addClass( classname, element ) {
var cn = element.className;
//test for existance
if( cn.indexOf( classname ) != -1 ) {
return;
}
//add a space if the element already has class
if( cn != '' ) {
classname = ' '+classname;
}
element.className = cn+classname;
}
function removeClass( classname, element ) {
var cn = element.className;
var rxp = new RegExp( "\\s?\\b"+classname+"\\b", "g" );
cn = cn.replace( rxp, '' );
element.className = cn;
}
if( cn.indexOf( classname ) != -1 ) { return; }
खबरदार कि अगर आप वर्ग "btn" को वर्ग "btn-info" के साथ पहले से ही यहाँ जोड़ रहे हैं, तो यह विफल हो जाता है।
element.className.split(" ");
यहाँ बताई गई समस्या @AlexandreDieulot को रोकने के लिए उपयोग करना चाहिए ।
यह मानते हुए कि आप केवल इस एक वर्ग को जोड़ने से अधिक कर रहे हैं (उदाहरण के लिए, आपको अतुल्यकालिक अनुरोध और इसी तरह से चल रहे हैं), मैं एक पुस्तकालय की सिफारिश करूँगा जैसे कि प्रोटोटाइप या jQuery ।
यह आपको बस (इसके सहित) बहुत सरल करने की आवश्यकता के बारे में सब कुछ कर देगा।
तो मान लें कि अब आपको अपने पृष्ठ पर jQuery मिल गया है, आप एक तत्व में एक वर्ग का नाम जोड़ने के लिए इस तरह कोड का उपयोग कर सकते हैं (लोड पर, इस मामले में):
$(document).ready( function() {
$('#div1').addClass( 'some_other_class' );
} );
की जाँच करें jQuery एपीआई ब्राउज़र अन्य सामान के लिए।
आप क्लास को किसी तत्व से जोड़ने / हटाने के लिए classList.add OR classList.remove विधि का उपयोग कर सकते हैं।
var nameElem = document.getElementById("name")
nameElem.classList.add("anyclss")
उपरोक्त कोड nameElem में एक वर्ग "anyclass" जोड़ देगा (और प्रतिस्थापित नहीं करेगा)। इसी तरह आप क्लास हटाने के लिए classList.remove () विधि का उपयोग कर सकते हैं।
nameElem.classList.remove("anyclss")
मौजूदा मानों को हटाने / प्रभावित किए बिना किसी तत्व में एक वर्ग जोड़ने के लिए, एक स्थान और नए वर्गनाम को जोड़ दें, जैसे:
document.getElementById("MyElement").className += " MyClass";
सभी मौजूदा कक्षाओं को एक या अधिक नई कक्षाओं से बदलने के लिए, क्लासनाम विशेषता सेट करें:
document.getElementById("MyElement").className = "MyClass";
(आप कई कक्षाओं को लागू करने के लिए एक स्थान-सीमांकित सूची का उपयोग कर सकते हैं।)
यदि आप jQuery का उपयोग नहीं करना चाहते हैं और पुराने ब्राउज़रों का समर्थन करना चाहते हैं:
function addClass(elem, clazz) {
if (!elemHasClass(elem, clazz)) {
elem.className += " " + clazz;
}
}
function elemHasClass(elem, clazz) {
return new RegExp("( |^)" + clazz + "( |$)").test(elem.className);
}
मुझे पता है कि IE9 आधिकारिक तौर पर शटडाउन है और हम इसे element.classList
ऊपर बताए अनुसार हासिल कर सकते हैं, लेकिन मैंने सिर्फ यह सीखने की कोशिश की कि यह बिना कैसे काम करता हैclassList
ऊपर दिए गए कई उत्तरों की मदद के है।
नीचे दिए गए कोड ऊपर दिए गए कई उत्तरों को बढ़ाते हैं और डुप्लीकेट कक्षाओं को जोड़ने से बचाते हैं।
function addClass(element,className){
var classArray = className.split(' ');
classArray.forEach(function (className) {
if(!hasClass(element,className)){
element.className += " "+className;
}
});
}
//this will add 5 only once
addClass(document.querySelector('#getbyid'),'3 4 5 5 5');
मुझे भी लगता है कि सबसे तेज़ तरीका एलीट 5 में एलिमेंट.प्रोटोटाइप.क्लासलिस्ट का उपयोग करना है: document.querySelector(".my.super-class").classList.add('new-class')
लेकिन आईई 8 में एलीमेंट.प्रोटोटाइप.क्लासलिस्ट जैसी कोई चीज़ नहीं है, वैसे भी आप इसे इस स्निपेट के साथ पॉलीफ़िल कर सकते हैं (इसे संपादित करने और इसे बेहतर बनाने के लिए स्वतंत्र रूप से ):
if(Element.prototype.classList === void 0){
function DOMTokenList(classes, self){
typeof classes == "string" && (classes = classes.split(' '))
while(this.length){
Array.prototype.pop.apply(this);
}
Array.prototype.push.apply(this, classes);
this.__self__ = this.__self__ || self
}
DOMTokenList.prototype.item = function (index){
return this[index];
}
DOMTokenList.prototype.contains = function (myClass){
for(var i = this.length - 1; i >= 0 ; i--){
if(this[i] === myClass){
return true;
}
}
return false
}
DOMTokenList.prototype.add = function (newClass){
if(this.contains(newClass)){
return;
}
this.__self__.className += (this.__self__.className?" ":"")+newClass;
DOMTokenList.call(this, this.__self__.className)
}
DOMTokenList.prototype.remove = function (oldClass){
if(!this.contains(newClass)){
return;
}
this[this.indexOf(oldClass)] = undefined
this.__self__.className = this.join(' ').replace(/ +/, ' ')
DOMTokenList.call(this, this.__self__.className)
}
DOMTokenList.prototype.toggle = function (aClass){
this[this.contains(aClass)? 'remove' : 'add'](aClass)
return this.contains(aClass);
}
DOMTokenList.prototype.replace = function (oldClass, newClass){
this.contains(oldClass) && this.remove(oldClass) && this.add(newClass)
}
Object.defineProperty(Element.prototype, 'classList', {
get: function() {
return new DOMTokenList( this.className, this );
},
enumerable: false
})
}
बस दूसरों ने जो कहा है, उस पर विस्तार से बताने के लिए, कई सीएसएस वर्गों को एक स्ट्रिंग में संयुक्त किया गया है, रिक्त स्थान द्वारा सीमांकित किया गया है। इस प्रकार, यदि आप इसे हार्ड-कोड करना चाहते हैं, तो यह बस इस तरह दिखेगा:
<div class="someClass otherClass yetAnotherClass">
<img ... id="image1" name="image1" />
</div>
वहाँ से आप आसानी से एक नई कक्षा जोड़ने के लिए आवश्यक जावास्क्रिप्ट प्राप्त कर सकते हैं ... बस तत्व के className गुण के लिए नए वर्ग के बाद एक स्थान संलग्न करें। यह जानकर, आप एक वर्ग को हटाने के लिए एक फ़ंक्शन भी लिख सकते हैं बाद में आवश्यकता उत्पन्न होनी चाहिए।
तत्व वर्गों को सरल तरीके से जोड़ने, हटाने या जांचने के लिए:
var uclass = {
exists: function(elem,className){var p = new RegExp('(^| )'+className+'( |$)');return (elem.className && elem.className.match(p));},
add: function(elem,className){if(uclass.exists(elem,className)){return true;}elem.className += ' '+className;},
remove: function(elem,className){var c = elem.className;var p = new RegExp('(^| )'+className+'( |$)');c = c.replace(p,' ').replace(/ /g,' ');elem.className = c;}
};
var elem = document.getElementById('someElem');
//Add a class, only if not exists yet.
uclass.add(elem,'someClass');
//Remove class
uclass.remove(elem,'someClass');
आप jQuery के समान आधुनिक दृष्टिकोण का उपयोग कर सकते हैं
यदि आपको केवल एक तत्व को बदलने की आवश्यकता है, तो पहले जो JS DOM में मिलेगा, आप इसका उपयोग कर सकते हैं:
document.querySelector('.someclass').className += " red";
.red {
color: red;
}
<div class="someclass">
<p>This method will add class "red" only to first element in DOM</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
एक जगह छोड़ने से पहले ध्यान रखेंक्लास के नाम ।
यदि आपके पास कई वर्ग हैं जहां आप नई कक्षा जोड़ना चाहते हैं, तो आप इसे इस तरह से उपयोग कर सकते हैं
document.querySelectorAll('.someclass').forEach(function(element) {
element.className += " red";
});
.red {
color: red;
}
<div class="someclass">
<p>This method will add class "red" to all elements in DOM that have "someclass" class.</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
<div class="someclass">
<p>lorem ipsum</p>
</div>
मुझे लगता है कि शुद्ध जावास्क्रिप्ट का उपयोग करना बेहतर है, जिसे हम ब्राउज़र के डोम पर चला सकते हैं।
यहां इसका उपयोग करने का कार्यात्मक तरीका है। मैंने ईएस 6 का उपयोग किया है लेकिन ईएस 5 और फंक्शन एक्सप्रेशन या फ़ंक्शन डेफिनेशन का उपयोग करने के लिए स्वतंत्र महसूस करें, जो भी आपके जावास्क्रिप्ट स्टाइलगाइड पर सूट करता है।
'use strict'
const oldAdd = (element, className) => {
let classes = element.className.split(' ')
if (classes.indexOf(className) < 0) {
classes.push(className)
}
element.className = classes.join(' ')
}
const oldRemove = (element, className) => {
let classes = element.className.split(' ')
const idx = classes.indexOf(className)
if (idx > -1) {
classes.splice(idx, 1)
}
element.className = classes.join(' ')
}
const addClass = (element, className) => {
if (element.classList) {
element.classList.add(className)
} else {
oldAdd(element, className)
}
}
const removeClass = (element, className) => {
if (element.classList) {
element.classList.remove(className)
} else {
oldRemove(element, className)
}
}
शुद्ध जेएस के साथ नमूना। पहले उदाहरण में हम अपने तत्व की आईडी प्राप्त करते हैं और उदाहरण के लिए 2 कक्षाएं जोड़ते हैं।
document.addEventListener('DOMContentLoaded', function() {
document.getElementsById('tabGroup').className = "anyClass1 anyClass2";
})
दूसरे उदाहरण में हमें तत्व का वर्ग नाम मिलता है और 1 और जोड़ते हैं।
document.addEventListener('DOMContentLoaded', function() {
document.getElementsByClassName('tabGroup')[0].className = "tabGroup ready";
})
लॉडश का उपयोग करने वालों और className
स्ट्रिंग को अपडेट करने के लिए :
// get element reference
var elem = document.getElementById('myElement');
// add some classes. Eg. 'nav' and 'nav header'
elem.className = _.chain(elem.className).split(/[\s]+/).union(['nav','navHeader']).join(' ').value()
// remove the added classes
elem.className = _.chain(elem.className).split(/[\s]+/).difference(['nav','navHeader']).join(' ').value()
सबसे पहले, डिव को एक आईडी दें। फिर, फ़ंक्शन appendClass को कॉल करें:
<script language="javascript">
function appendClass(elementId, classToAppend){
var oldClass = document.getElementById(elementId).getAttribute("class");
if (oldClass.indexOf(classToAdd) == -1)
{
document.getElementById(elementId).setAttribute("class", classToAppend);
}
}
</script>
आप अपने तत्व का चयन करने के लिए एपीआई क्वेरीसेंटर का उपयोग कर सकते हैं और फिर पैरामीटर और नए क्लासनाम के साथ फ़ंक्शन को पैरामीटर के रूप में बना सकते हैं। IE8 के लिए आधुनिक ब्राउज़रों के लिए कक्षा सूची का उपयोग करना। तब आप किसी ईवेंट के बाद फ़ंक्शन को कॉल कर सकते हैं।
//select the dom element
var addClassVar = document.querySelector('.someclass');
//define the addclass function
var addClass = function(el,className){
if (el.classList){
el.classList.add(className);
}
else {
el.className += ' ' + className;
}
};
//call the function
addClass(addClassVar, 'newClass');
document.getElementById('some_id').className+=' someclassname'
या:
document.getElementById('come_id').classList.add('someclassname')
पहला दृष्टिकोण कक्षा को जोड़ने में मदद करता था जब दूसरा दृष्टिकोण काम नहीं करता था।
के सामने एक जगह रखने के लिए मत भूलना' someclassname'
पहले दृष्टिकोण के ।
हटाने के लिए आप उपयोग कर सकते हैं:
document.getElementById('some_id').classList.remove('someclassname')
यह js कोड मेरे लिए काम करता है
classname प्रतिस्थापन प्रदान करता है
var DDCdiv = hEle.getElementBy.....
var cssCNs = DDCdiv.getAttribute('class');
var Ta = cssCNs.split(' '); //split into an array
for (var i=0; i< Ta.length;i++)
{
if (Ta[i] == 'visible'){
Ta[i] = 'hidden';
break;// quit for loop
}
else if (Ta[i] == 'hidden'){
Ta[i] = 'visible';
break;// quit for loop
}
}
DDCdiv.setAttribute('class',Ta.join(' ') ); // Join array with space and set class name
सिर्फ उपयोग जोड़ने के लिए
var cssCNs = DDCdiv.getAttribute('class');
var Ta = cssCNs.split(' '); //split into an array
Ta.push('New class name');
// Ta.push('Another class name');//etc...
DDCdiv.setAttribute('class',Ta.join(' ') ); // Join array with space and set class name
उपयोग को दूर करने के लिए
var cssCNs = DDCdiv.getAttribute('class');
var Ta = cssCNs.split(' '); //split into an array
for (var i=0; i< Ta.length;i++)
{
if (Ta[i] == 'visible'){
Ta.splice( i, 1 );
break;// quit for loop
}
}
DDCdiv.setAttribute('class',Ta.join(' ') ); // Join array with space and set class name
आशा है कि यह किसी के लिए उपयोगी है
element.classList.add("my-class")
इसके बजाय उपयोग करें ।