क्या जावास्क्रिप्ट दस्तावेज़ के लिए कोई आशुलिपि है ।getElementById? या क्या कोई तरीका है जिससे मैं एक को परिभाषित कर सकता हूं? यह दोहरावदार हो जाता है और फिर से खत्म हो जाता है ।
क्या जावास्क्रिप्ट दस्तावेज़ के लिए कोई आशुलिपि है ।getElementById? या क्या कोई तरीका है जिससे मैं एक को परिभाषित कर सकता हूं? यह दोहरावदार हो जाता है और फिर से खत्म हो जाता है ।
जवाबों:
var $ = function( id ) { return document.getElementById( id ); };
$( 'someID' )
यहां मैंने उपयोग किया है $, लेकिन आप किसी भी मान्य चर नाम का उपयोग कर सकते हैं।
var byId = function( id ) { return document.getElementById( id ); };
byId( 'someID' )
$, वह भी चुनने पर बधाई?"
$यदि आप उन्हें लोड नहीं करते हैं तो कितने पुस्तकालय उपयोग करते हैं।
var $ = document.getElementById.bind(document), लेकिन bindसभी ब्राउज़रों में उपलब्ध नहीं है। हालांकि यह तेजी से है, क्योंकि मैं केवल देशी तरीकों का उपयोग कर रहा हूं। बस यही जोड़ना चाहता था।
एक अतिरिक्त चरित्र को बचाने के लिए आप स्ट्रिंग प्रोटोटाइप को इस तरह से प्रदूषित कर सकते हैं:
pollutePrototype(String, '绎', {
configurable: false, // others must fail
get: function() {
return document.getElementById(this);
},
set: function(element) {
element.id = this;
}
});
function pollutePrototype(buildIn, name, descr) {
var oldDescr = Object.getOwnPropertyDescriptor(buildIn.prototype, name);
if (oldDescr && !oldDescr.configurable) {
console.error('Unable to replace ' + buildIn.name + '.prototype.' + name + '!');
} else {
if (oldDescr) {
console.warn('Replacing ' + buildIn.name + '.prototype.' + name + ' might cause unexpected behaviour.');
}
Object.defineProperty(buildIn.prototype, name, descr);
}
}
यह कुछ ब्राउज़रों में काम करता है और आप इस तरह से तत्वों तक पहुँच सकते हैं:
document.body.appendChild(
'footer'.绎 = document.createElement('div')
);
'footer'.绎.textContent = 'btw nice browser :)';
मैंने लगभग बेतरतीब ढंग से संपत्ति का नाम चुना है। यदि आप वास्तव में इस आशुलिपि का उपयोग करना चाहते हैं, तो मैं सुझाव देना चाहूंगा कि टाइप करना कुछ आसान है।
आप आसानी से शॉर्टहैंड आसानी से खुद बना सकते हैं:
function getE(id){
return document.getElementById(id);
}
योगदान करने के लिए एक त्वरित विकल्प:
HTMLDocument.prototype.e = document.getElementById
तो बस करो:
document.e('id');
एक पकड़ है, यह उन ब्राउज़रों में काम नहीं करता है जो आपको प्रोटोटाइप (जैसे IE6) का विस्तार नहीं करने देते हैं।
prototype.jsथा, जो बिल्कुल यही काम करता था।
(न केवल आईडी द्वारा तत्व प्राप्त करने के लिए शॉर्टहैंड, बल्कि कक्षा द्वारा तत्व भी प्राप्त कर रहा है: पी)
मैं कुछ ऐसा उपयोग करता हूं
function _(s){
if(s.charAt(0)=='#')return [document.getElementById(s.slice(1))];
else if(s.charAt(0)=='.'){
var b=[],a=document.getElementsByTagName("*");
for(i=0;i<a.length;i++)if(a[i].className.split(' ').indexOf(s.slice(1))>=0)b.push(a[i]);
return b;
}
}
उपयोग: _(".test")सभी तत्वों को वर्ग नाम के साथ लौटाता है test, और _("#blah")आईडी के साथ एक तत्व देता है blah।
document.querySelectorAllएक हिस्से का अनुकरण करने की कोशिश करने के बजाय बेहतर शॉर्टकट बना सकते हैं querySelectorAll।
आईडी को बचाया जाता है window ।
एचटीएमएल
<div id='logo'>logo</div>
जे एस
logo.innerHTML;
लेखन के समान है:
document.getElementById( 'logo' ).innerHtml;
मैं पूर्व पद्धति का उपयोग करने का सुझाव नहीं देता क्योंकि यह आम बात नहीं है।
<div id="location"></div>और कॉल करने window.locationसे काम नहीं चलेगा।
यहाँ कई अच्छे उत्तर हैं और कई jQuery जैसे सिंटैक्स के आसपास नृत्य कर रहे हैं, लेकिन वास्तव में jQuery का उपयोग करने वाले एक उल्लेख नहीं है। यदि आप इसे आज़माने के खिलाफ नहीं हैं, तो jQuery देखें । यह आप तत्वों को इस तरह से सुपर आसान का चयन करते हैं ..
$('#elementId')
$('.className')
$('a') // all anchors on page
$('inputs') // all inputs on page
$('p a') // all anchors within paragaphs on page
कोई भी बिल्ट-इन नहीं है।
यदि आप वैश्विक नाम स्थान को प्रदूषित करने से गुरेज नहीं करते, तो क्यों नहीं:
function $e(id) {
return document.getElementById(id);
}
EDIT - मैंने फ़ंक्शन नाम को कुछ असामान्य होने के लिए बदल दिया है , लेकिन संक्षिप्त रूप से नहीं तो jQuery के साथ टकरा रहा है या कुछ और जो नंगे $संकेत का उपयोग करता है ।
हाँ, यह एक ही समारोह का उपयोग करने के दोहराव हो जाता है से अधिक और अधिक एक अलग तर्क के साथ हर बार:
var myImage = document.getElementById("myImage");
var myDiv = document.getElementById("myDiv");
तो एक अच्छी बात एक ऐसा कार्य होगा जो एक ही समय में उन सभी तर्कों को लेता है:
function getElementsByIds(/* id1, id2, id3, ... */) {
var elements = {};
for (var i = 0; i < arguments.length; i++) {
elements[arguments[i]] = document.getElementById(arguments[i]);
}
return elements;
}
तब आपके पास एक वस्तु में संग्रहीत आपके सभी तत्वों का संदर्भ होगा:
var el = getElementsByIds("myImage", "myDiv");
el.myImage.src = "test.gif";
लेकिन फिर भी आपको उन सभी आईडी को सूचीबद्ध करना होगा।
आप इसे और भी सरल बना सकते हैं यदि आप सभी तत्वों को आईडी के साथ चाहते हैं :
function getElementsWithIds() {
var elements = {};
var elementList = document.querySelectorAll("[id]");
for (var i = 0; i < elementList.length; i++) {
elements[elementList[i].id] = elementList[i];
}
return elements;
}
लेकिन इस फ़ंक्शन को कॉल करना बहुत महंगा होगा यदि आपके पास कई तत्व हैं।
तो, सैद्धांतिक रूप से, यदि आप withकीवर्ड का उपयोग करेंगे तो आप इस तरह कोड लिख सकते हैं:
with (getElementsByIds('myButton', 'myImage', 'myTextbox')) {
myButton.onclick = function() {
myImage.src = myTextbox.value;
};
}
लेकिन मैं इसके इस्तेमाल को बढ़ावा नहीं देना चाहता with। संभवतः ऐसा करने का एक बेहतर तरीका है।
ठीक है, आप एक आशुलिपि समारोह बना सकते हैं, वही मैं करता हूँ।
function $(element) {
return document.getElementById(element);
}
और फिर जब आप इसे प्राप्त करना चाहते थे, तो आप बस करते हैं
$('yourid')
इसके अलावा, एक और उपयोगी ट्रिक जो मुझे मिली, वह यह है कि यदि आप किसी आइटम आईडी का मान या इनर HTML प्राप्त करना चाहते हैं, तो आप इस तरह से बना सकते हैं:
function $val(el) {
return $(el).value;
}
function $inner(el) {
return $(el).innerHTML;
}
मैंने वास्तव में इस पूरे विचार के आधार पर एक तरह की मिनी जावास्क्रिप्ट लाइब्रेरी बनाई। यहाँ यह है।
मैं अक्सर उपयोग करता हूं:
var byId='getElementById'
var byClass='getElementsByClass'
var byTag='getElementsByTag'
var mydiv=document[byId]('div')
/* as document["getElementById"] === document.getElementById */
मुझे लगता है कि यह बाहरी कार्य (जैसे $()या byId()) से बेहतर है क्योंकि आप इस तरह की चीजें कर सकते हैं:
var link=document[byId]('list')[byClass]('li')[0][byTag]('a')[0]
Btw, इस के लिए jQuery का उपयोग नहीं करते हैं, jQuery की तुलना में, बहुत धीमी है document.getElementById(), $()या जैसे एक बाहरी कार्य byId(), या मेरी विधि: http://jsperf.com/document-getelementbyid-vs-jquery/5
यदि यह आपकी अपनी साइट पर है, तो jQuery जैसी लाइब्रेरी का उपयोग करने पर विचार करें तो आपको यह और कई अन्य उपयोगी शॉर्टहैंड देने के लिए कि ब्राउज़र के अंतर को भी सार करता है। व्यक्तिगत रूप से, यदि मैंने लंबे समय से परेशान होने के लिए पर्याप्त कोड लिखा है, तो मैं jQuery शामिल करूंगा।
JQuery में, वाक्यविन्यास होगा $("#someid")। यदि आप वास्तविक डोम तत्व चाहते हैं और jQuery आवरण नहीं है, तो यह है $("#someid")[0], लेकिन आप सबसे अधिक संभावना यह कर सकते हैं कि आप jpg आवरण के बाद जो भी हो।
या, यदि आप ब्राउज़र डेवलपर कंसोल में इसका उपयोग कर रहे हैं, तो उनकी अंतर्निहित उपयोगिताओं पर शोध करें। जैसा कि किसी और ने उल्लेख किया है, क्रोम जावास्क्रिप्ट कंसोल में एक $("someid")विधि शामिल है , और आप डेवलपर टूल "तत्वों" दृश्य में एक तत्व पर भी क्लिक कर सकते हैं और फिर इसे $0कंसोल से संदर्भित कर सकते हैं । पहले से चयनित तत्व बन जाता है $1और इसी तरह।
यदि यहां एकमात्र मुद्दा टाइप कर रहा है, तो शायद आपको खुद को एक जावास्क्रिप्ट संपादक से मिलना चाहिए।
यदि उद्देश्य को छोटा कोड प्राप्त करना है, तो आप jQuery की तरह एक जावास्क्रिप्ट पुस्तकालय पर विचार कर सकते हैं, या आप केवल अपना आशुलिपि लिख सकते हैं, जैसे:
function byId(string) {return document.getElementById(string);}
मैं ऊपर से बेहतर प्रदर्शन के लिए करता था। पिछले साल मैंने जो सीखा वह यह है कि कम्प्रेशन तकनीकों के साथ सर्वर आपके लिए यह स्वचालित रूप से करता है, इसलिए मेरी छोटी तकनीक वास्तव में मेरे कोड को भारी बना रही है। अब मैं पूरे दस्तावेज़ को टाइप करके खुश हूँ ।getElementById
यदि आप एक आशुलिपि समारोह के लिए पूछ रहे हैं ...
<!DOCTYPE html>
<html>
<body>
The content of the body element is displayed in your browser.
<div id="d1">DIV</div>
<script>
var d=document;
d.g=document.getElementById;
d.g("d1").innerHTML = "catch";
</script>
</body>
</html>
या
<!DOCTYPE html>
<html>
<body>
The content of the body element is displayed in your browser.
<div id="d1">DIV</div>
<script>
var w=window;
w["d1"].innerHTML = "catch2";
</script>
</body>
document.querySelectorAll ... जैसे एक jquery को लपेटें
function $(selector){
var s = document.querySelectorAll(selector);
return s.length > 1 ? s : s[0];
}
// usage: $('$myId')
$('#myId')तो यह आमतौर पर उस HTMLElement को वापस करना चाहिए, क्योंकि आपने उम्मीद की थी कि उस आईडी को एक बार सौंपा जाएगा। लेकिन अगर आप इसे ऐसे प्रश्नों के साथ प्रयोग करेंगे जो कई तत्वों से मेल खा सकते हैं तो यह बोझिल हो जाता है।
ठीक है, अगर तत्व की आईडी वैश्विक ऑब्जेक्ट के किसी भी गुण के साथ प्रतिस्पर्धा नहीं करती है, तो आपको किसी फ़ंक्शन का उपयोग करने की आवश्यकता नहीं है।
myDiv.appendChild(document.createTextNode("Once I was myDiv. "));
myDiv.id = "yourDiv";
yourDiv.appendChild(document.createTextNode("But now I'm yourDiv."));
संपादित करें: लेकिन आप इस 'सुविधा' का उपयोग नहीं करना चाहते हैं।
एक और आवरण:
const IDS = new Proxy({}, {
get: function(target, id) {
return document.getElementById(id); } });
IDS.camelCaseId.style.color = 'red';
IDS['dash-id'].style.color = 'blue';
<div id="camelCaseId">div 1</div>
<div id="dash-id">div 2</div>
यह, यदि आप अकल्पनीय का उपयोग नहीं करना चाहते हैं , तो ऊपर देखें।
मैंने इसे कल लिखा था और इसे काफी उपयोगी पाया।
function gid(id, attribute) {
var x = 'document.getElementById("'+id+'")';
if(attribute) x += '.'+attribute;
eval('x =' + x);
return x;
}
इस तरह से आप इसका उपयोग करते हैं।
// Get element by ID
var node = gid('someID'); //returns <p id='someID' class='style'>Hello World</p>
// returns 'Hello World'
// var getText = document.GetElementById('someID').innerText;
var getText = gid('someID', 'innerText');
// Get parent node
var parentNode = gid('someID', 'parentNode');