2013-05-03 5 views
10

के साथ मौजूदा जावास्क्रिप्ट समाधान का परीक्षण करना मुझे जावास्क्रिप्ट कोड (स्टैक ओवरव्लो लिंक: How to add a class to body tag?) का एक बड़ा टुकड़ा मिला। हालांकि, मुझे इसे लागू करने में परेशानी हो रही है।बॉडी टैग में कक्षा जोड़ें: कोई परिणाम

<!doctype html> 
<html> 
<head> 
<title>Javascript Test</title> 
<meta charset="utf-8" /> 

<script type="text/javascript"> 
var newClass = window.location.href; 
newClass = newClass.match(/\/[^\/]+(_|\.)[^\/]+$/); 
$(document.body).addClass(newClass); 
</script> 

</head> 
<body> 
</body> 
</html> 

हालांकि मैं किसी भी वर्ग को नहीं देख पा परिणाम के रूप में शरीर टैग करने के लिए कहा:

नीचे कोड मैं एक परीक्षण पृष्ठ पर उपयोग कर रहा हूँ है। (सफारी, क्रोम में स्रोत देखना) मैंने jQuery के साथ और बिना परीक्षण किया है।

क्या आप देखते हैं कि कोड के साथ क्या गलत है?

मैं एक Behance ProSite के साथ काम कर रहा हूं। मैं कई गैलरी बना सकता हूं, लेकिन प्रत्येक के पास एक ही पृष्ठभूमि होगी क्योंकि वे एक ही टेम्पलेट का उपयोग करते हैं। मुझे बॉडी टैग में एक अनूठी कक्षा जोड़ने की ज़रूरत है ताकि मैं प्रत्येक को एक अलग सीएसएस पृष्ठभूमि संपत्ति के साथ लक्षित कर सकूं।

+0

सुनिश्चित करें कि आपके पृष्ठ पर jQuery शामिल है। – dinjas

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। मैंने '' जोड़ा है और '$ (' body ') के साथ जावास्क्रिप्ट की अंतिम पंक्ति को प्रतिस्थापित किया है। (newClass); 'और अभी भी कोई परिणाम नहीं। – user2347736

+0

आपको अपनी स्क्रिप्ट – enb081

उत्तर

6

इस कोड के साथ एक जोड़ी छोटे मुद्दों है:

  1. यकीन है कि regex match में वास्तव में अपना URL पैटर्न से मेल खाता है। मुझे लगता है कि Behance Prosites /1234/section और /1234/5678/section/item जैसे यूआरएल पैटर्न का उपयोग करते हैं।
  2. match फ़ंक्शन एक सरणी देता है, इसलिए आप newClass को addClass पर सीधे पास नहीं कर सकते हैं। आपको newClass[0] जैसे सरणी आइटमों में से एक को पास करने की आवश्यकता है।
  3. चूंकि आपकी स्क्रिप्ट <head> में है, इसलिए यह <body> संशोधित नहीं कर सकती क्योंकि यह निष्पादन समय पर मौजूद नहीं है। आपको या तो पृष्ठ के निचले हिस्से में स्क्रिप्ट को स्थानांतरित करने या डीओएम लोड होने के बाद निष्पादन को स्थगित करने की आवश्यकता है।

यह स्निपेट विशेष रूप से Behance Prosites के लिए काम करना चाहिए। यूआरएल से /1234/5678/ को फ़िल्टर करने के लिए रेगेक्स यूआरएल पथ खंडों को कम से कम एक गैर-न्यूमेरिक वर्ण से मेल खाता है, इसलिए उपरोक्त उदाहरण यूआरएल में newClass[0]section होगा।

$(document).ready(function() { 
    var path = window.location.pathname; 
    var newClass = path.match(/[^\/]*[^\d\/][^\/]*/); 
    $('body').addClass(newClass[0]); 
}); 

शुभकामनाएँ!

+0

यह मेरे लिए काम करता है! धन्यवाद मैट! – user2347736

20

आवश्यकता के बिना शरीर टैग के लिए एक वर्ग को जोड़ने के लिए, कुछ वसा 3 पार्टी पुस्तकालय

शामिल करने के लिए आप वेनिला जावास्क्रिप्ट में निम्न कर सकते हैं एक वर्ग पहले से ही तो शरीर पर मौजूद है, तो

document.body.className += " something"; 

अन्यथा

document.body.className = "something"; 

उदाहरण पर jsfiddle

वर्ग जोड़ा पृष्ठ के बाद लोड हो जाए, तो addEventListener का उपयोग करें और दस्तावेज़ लोड हो रहा है प्रक्रिया के अंत में window.onload event

लोड घटना आग के लिए कोई हैंडलर बनाने के लिए। पर इस बिंदु पर, दस्तावेज़ में सभी ऑब्जेक्ट्स डोम में हैं, और सभी छवियों और उप-फ़्रेम लोडिंग समाप्त हो गए हैं।

window.addEventListener("load", function() { 
    document.body.className = "something"; 
}, false); 
+0

से पहले jquery * का संदर्भ देना चाहिए, लेकिन मुझे अभी भी काम नहीं है (क्रोम और सफारी), यह कोड है कि मैं लाइन के लिए लाइन का उपयोग कर रहा हूं अगर मुझे कुछ याद आ रहा है: ' जावास्क्रिप्ट टेस्ट <मेटा charset = "utf-8" /> ' – user2347736

+1

ऑनलोड श्रोता लागू की तरह मैं अपने उदाहरण में बताया गया। – Xotic750

+0

आधुनिक ब्राउज़रों में क्लासनाम को निकालने के लिए, आप दस्तावेज़.querySelector ('body') का उपयोग कर सकते हैं। ClassList.remove ('something'); कक्षा का नाम केस संवेदनशील है – phil

संबंधित मुद्दे