दिलचस्प पोस्ट
क्यों Rails4 "संपत्ति" समूह के लिए Gemfile में ड्रॉप समर्थन किया था कैसे "वापस जाओ" समारोह में जोड़ें WebView टुकड़े के अंदर? कर्ली ब्रेसिज़ के बाद कब मैं एक सेमीकोलन का उपयोग करना चाहिए? किसी मौजूदा दृश्य स्टूडियो वेब साइट प्रोजेक्ट में टाइपस्क्रिप्ट का उपयोग करना जावास्क्रिप्ट का उपयोग कर स्ट्रिंग के अंतिम अक्षर कैसे प्राप्त कर सकते हैं I क्यों पायथन स्थिर चर नहीं है? जावास्क्रिप्ट, नल / अपरिभाषित के लिए नेस्टेड ऑब्जेक्ट गुणों को जांचने का शानदार तरीका स्विफ्ट में दृश्य नियंत्रकों के बीच डेटा पास करना 64-बिट विंडोज पर चलने वाली प्रक्रियाओं की सूची जब मैं किसी निष्पादक सेवा पर समापन सेवा का उपयोग करूँ? jqGrid फ़िल्टरिंग रिकॉर्ड्स इकाई फ़्रेमवर्क क्वेरी योग्य एसिंक CSV MIME- प्रकार का उपयोग कैसे करें? शरीर का 100% ब्राउज़र ऊँचाई बनाएं WinForms में पाठ बॉक्स से फ़ोकस को कैसे निकालना है?

किसी दिए गए इनपुट से संबद्ध एचटीएमएल लेबल खोजें

मान लीजिए मेरे पास html फॉर्म है। प्रत्येक इनपुट / चयन / टेक्स्टेरेअ में एक संबंधित <label> साथ ही उसके साथी के आईडी पर सेट एट्रिब्यूट के for । इस स्थिति में, मुझे पता है कि प्रत्येक इनपुट में केवल एक लेबल होगा

जावास्क्रिप्ट में इनपुट तत्व को देखते हुए – onkeyup इवेंट के माध्यम से, उदाहरण के लिए – यह संबद्ध लेबल को खोजने का सबसे अच्छा तरीका क्या है?

Solutions Collecting From Web of "किसी दिए गए इनपुट से संबद्ध एचटीएमएल लेबल खोजें"

सबसे पहले, लेबल के लिए पृष्ठ को स्कैन करें, और वास्तविक प्रपत्र तत्व से लेबल का एक संदर्भ असाइन करें:

 var labels = document.getElementsByTagName('LABEL'); for (var i = 0; i < labels.length; i++) { if (labels[i].htmlFor != '') { var elem = document.getElementById(labels[i].htmlFor); if (elem) elem.label = labels[i]; } } 

फिर, आप बस जा सकते हैं:

 document.getElementById('MyFormElem').label.innerHTML = 'Look ma this works!'; 

लुकअप सरणी के लिए कोई आवश्यकता नहीं 🙂

यदि आप jQuery का प्रयोग कर रहे हैं तो आप ऐसा कुछ कर सकते हैं

 $('label[for="foo"]').hide (); 

यदि आप jQuery का उपयोग नहीं कर रहे हैं, तो आपको लेबल के लिए खोज करना होगा। ये एक ऐसा कार्य है जो एक तर्क के रूप में तत्व लेता है और संबद्ध लेबल को वापस करता है

 function findLableForControl(el) { var idVal = el.id; labels = document.getElementsByTagName('label'); for( var i = 0; i < labels.length; i++ ) { if (labels[i].htmlFor == idVal) return labels[i]; } } 

मुझे आश्चर्य है कि कोई भी यह नहीं जानता कि आपको पूरी तरह से करने की अनुमति है:

 <label>Put your stuff here: <input value="Stuff"></label> 

जो सुझाव दिए गए उत्तरों में से कोई भी नहीं उठाएगा, लेकिन इनपुट को सही ढंग से लेबल करेगा

यहां कुछ कोड है जो इस मामले को ध्यान में रखता है:

 $.fn.getLabels = function() { return this.map(function() { var labels = $(this).parents('label'); if (this.id) { labels.add('label[for="' + this.id + '"]'); } return labels.get(); }); }; 

उपयोग:

 $('#myfancyinput').getLabels(); 

कुछ नोट:

  • कोड स्पष्टता के लिए लिखा गया था, प्रदर्शन के लिए नहीं। अधिक प्रदर्शन विकल्प उपलब्ध हो सकते हैं।
  • यह कोड एक बार में एकाधिक आइटम के लेबल्स को प्राप्त करने का समर्थन करता है यदि वह ऐसा नहीं है जो आप चाहते हैं, तो आवश्यकतानुसार अनुकूलित करें।
  • यह अब भी ऐसी चीजों का ख्याल नहीं रखता है जैसे कि aria-labelledby यदि आप इसका इस्तेमाल करते हैं (पाठक को एक अभ्यास के रूप में छोड़ दिया गया है)
  • विभिन्न उपयोगकर्ता एजेंटों और सहायक प्रौद्योगिकियों में सहायता करने के लिए कई लेबल्स का उपयोग करना एक मुश्किल काम है, इसलिए अच्छी तरह से परीक्षण करें और अपने जोखिम पर इत्यादि उपयोग करें आदि।
  • हाँ, आप jQuery का उपयोग किए बिना भी इसे लागू कर सकते हैं। 🙂

एचटीएमएल 5 मानक में एक labels संपत्ति है जो एक इनपुट तत्व से जुड़े लेबल को इंगित करता है।

तो आप इस तरह से कुछ का उपयोग कर सकते हैं (मूल labels संपत्ति के लिए समर्थन लेकिन यदि ब्राउज़र इसका समर्थन नहीं करता है तो लेबल्स को पुनः प्राप्त करने के लिए एक फ़ॉलबैक के साथ) …

 var getLabelsForInputElement = function(element) { var labels = []; var id = element.id; if (element.labels) { return element.labels; } id && Array.prototype.push .apply(labels, document.querySelector("label[for='" + id + "']")); while (element = element.parentNode) { if (element.tagName.toLowerCase() == "label") { labels.push(element); } } return labels; }; // ES6 var getLabelsForInputElement = (element) => { let labels; let id = element.id; if (element.labels) { return element.labels; } if (id) { labels = Array.from(document.querySelector(`label[for='${id}']`))); } while (element = element.parentNode) { if (element.tagName.toLowerCase() == "label") { labels.push(element); } } return labels; }; 

अगर आप jQuery का उपयोग कर रहे हैं तो भी आसान …

 var getLabelsForInputElement = function(element) { var labels = $(); var id = element.id; if (element.labels) { return element.labels; } id && (labels = $("label[for='" + id + "']"))); labels = labels.add($(element).parents("label")); return labels; }; 

इससे पहले …

 var labels = document.getElementsByTagName("LABEL"), lookup = {}, i, label; for (i = 0; i < labels.length; i++) { label = labels[i]; if (document.getElementById(label.htmlFor)) { lookup[label.htmlFor] = label; } } 

बाद में…

 var myLabel = lookup[myInput.id]; 

Snarky टिप्पणी: हाँ, आप इसे JQuery के साथ भी कर सकते हैं। 🙂

jquery के साथ आप ऐसा कुछ कर सकते हैं

 var nameOfLabel = someInput.attr('id'); var label = $("label[for='" + nameOfLabel + "']"); 
 $("label[for='inputId']").text() 

इससे मुझे अपनी आईडी का उपयोग करके एक इनपुट तत्व का लेबल प्राप्त करने में मदद मिली I

गिज से उत्तर मेरे लिए सबसे मूल्यवान था, लेकिन दुर्भाग्य से यह एक्सटेंशन काम नहीं करता है।

यहां एक पुनः लिखने वाला एक्सटेंशन है जो काम करता है, यह किसी को मदद कर सकता है:

 jQuery.fn.getLabels = function () { return this.map(function () { var parentLabels = $(this).parents('label').get(); var associatedLabels = this.id ? associatedLabels = $("label[for='" + this.id + "']").get() : []; return parentLabels.concat(associatedLabels); }); }; 

यदि आप क्वेरी सेलेक्टोरर (और आप यहां तक ​​कि IE9 और कभी-कभी IE8!) का उपयोग करने के लिए तैयार हैं, तो एक और तरीका व्यवहार्य हो जाता है

यदि आपके प्रपत्र फ़ील्ड में एक आईडी है, और आप विशेषता के for लेबल का उपयोग करते हैं, तो यह आधुनिक जावास्क्रिप्ट में बहुत आसान हो जाता है:

 var form = document.querySelector('.sample-form'); var formFields = form.querySelectorAll('.form-field'); [].forEach.call(formFields, function (formField) { var inputId = formField.id; var label = form.querySelector('label[for=' + inputId + ']'); console.log(label.textContent); }); 

कुछ ने कई लेबल के बारे में नोट किया है; यदि वे सभी विशेषता के for एक ही मान का उपयोग करते हैं, तो बस querySelectorAll उपयोग करें, querySelectorAll querySelector और लूप के बजाय सभी की जरूरत के लिए।

क्या आपने document.getElementbyID ('id') का उपयोग करने की कोशिश की है जहां आईडी लेबल का आईडी है या ऐसी स्थिति है जिसे आप नहीं जानते हैं कि आप किसके लिए खोज रहे हैं

उदाहरण के तौर पर, इस रूप में लेबल को आईडी जोड़ने में वास्तव में बहुत आसान है:

 <label for="firstName" id="firstNameLabel">FirstName:</label> <input type="text" id="firstName" name="firstName" class="input_Field" pattern="^[a-zA-Z\s\-]{2,25}$" maxlength="25" title="Alphabetic, Space, Dash Only, 2-25 Characters Long" autocomplete="on" required /> 

उसके बाद, आप बस इस तरह से कुछ का उपयोग कर सकते हैं:

 if (myvariableforpagelang == 'es') { // set field label to spanish document.getElementById("firstNameLabel").innerHTML = "Primer Nombre:"; // set field tooltip (title to spanish document.getElementById("firstName").title = "Alfabética, espacio, guión Sólo, 2-25 caracteres de longitud"; } 

जावास्क्रिप्ट को काम करने के लिए एक बॉडी ऑनलोड फ़ंक्शन में होना चाहिए।

सिर्फ एक विचार है, मेरे लिए खूबसूरती से काम करता है

जैसा कि पहले से ही उल्लेख किया गया है, (वर्तमान में) शीर्ष-रेट किए गए उत्तर लेबल के अंदर इनपुट एम्बेड करने की संभावना को ध्यान में नहीं लेते हैं

क्योंकि कोई भी JQuery- मुक्त उत्तर पोस्ट नहीं किया है, यहां मेरा है:

 var labels = form.getElementsByTagName ('label'); var input_label = {}; for (var i = 0 ; i != labels.length ; i++) { var label = labels[i]; var input = label.htmlFor ? document.getElementById(label.htmlFor) : label.getElementsByTagName('input')[0]; input_label[input.outerHTML] = (label.innerText || label.textContent); // innerText for IE8- } 

इस उदाहरण में, सादगी के लिए, लुकअप तालिका सीधे इनपुट HTML तत्वों द्वारा अनुक्रमित है। यह शायद ही कुशल है और आप इसे अनुकूलित कर सकते हैं, हालांकि आपको पसंद है।

यदि आप एक ही बार में अनेक रूपों के लिए लेबल प्राप्त करना चाहते हैं, तो आप मूल तत्व के रूप में एक फ़ॉर्म का उपयोग कर सकते हैं या संपूर्ण दस्तावेज़।

गलत एचटीएमएल (लेबल के भीतर एकाधिक या अनुपलब्ध इनपुट, संबंधित htmlFor आईडी के साथ गुम इनपुट, आदि) के लिए कोई जांच नहीं की गई है, लेकिन उन्हें जोड़ने के लिए स्वतंत्र महसूस करें।

आप लेबल ग्रंथों को ट्रिम कर सकते हैं, क्योंकि अंतराल स्थान अक्सर लेबल पर इनपुट के साथ एम्बेड किए जाने पर मौजूद होते हैं

एक JQuery चयनकर्ता का उपयोग करें:

 $("label[for="+inputElement.id+"]") 

भविष्य के खोजकर्ताओं के लिए … फ्लास्स्वैट के स्वीकृत जवाब का एक jQuery-ified संस्करण निम्न है:

 var labels = $("label"); for (var i = 0; i < labels.length; i++) { var fieldId = labels[i].htmlFor; if (fieldId != "") { var elem = $("#" + fieldId); if (elem.length != 0) { elem.data("label", $(labels[i])); } } } 

का उपयोग करते हुए:

 $("#myFormElemId").data("label").css("border","3px solid red"); 

मुझे पता है यह पुराना है, लेकिन मुझे कुछ समाधानों के साथ परेशानी थी और यह एक साथ मिल गया। मैंने इसे विंडोज (क्रोम, फ़ायरफ़ॉक्स और एमएसआईई) और ओएस एक्स (क्रोम और सफारी) पर परीक्षण किया है और यह मानना ​​है कि यह सबसे सरल समाधान है। यह एक लेबल संलग्न करने की इन तीन शैली के साथ काम करता है

 <label><input type="checkbox" class="c123" id="cb1" name="item1">item1</label> <input type="checkbox" class="c123" id="cb2" name="item2">item2</input> <input type="checkbox" class="c123" id="cb3" name="item3"><label for="cb3">item3</label> 

JQuery का उपयोग करना:

 $(".c123").click(function() { $cb = $(this); $lb = $(this).parent(); alert( $cb.attr('id') + ' = ' + $lb.text() ); }); 

मेरे JSFiddle: http://jsfiddle.net/pnosko/6PQCw/

मैंने अपनी जरूरत के लिए बनाया है, किसी के लिए उपयोगी हो सकता है: JSFIDDLE

 $("input").each(function () { if ($.trim($(this).prev('label').text()) != "") { console.log("\nprev>children:"); console.log($.trim($(this).prev('label').text())); } else { if ($.trim($(this).parent('label').text()) != "") { console.log("\nparent>children:"); console.log($.trim($(this).parent('label').text())); } else { if ($.trim($(this).parent().prev('label').text()) != "") { console.log("\nparent>prev>children:"); console.log($.trim($(this).parent().prev('label').text())); } else { console.log("NOTFOUND! So set your own condition now"); } } } }); 

मैं थोड़ा आश्चर्यचकित हूँ कि कोई भी सीएसएस संबंध पद्धति का उपयोग करने का सुझाव नहीं दे रहा है?

एक स्टाइल शीट में आप तत्व चयनकर्ता से लेबल का संदर्भ दे सकते हैं:

 <style> //for input element with class 'YYY' input.YYY + label {} </style> 

यदि चेकबॉक्स में 'XXX' का एक आईडी है तो लेबल को jQuery के माध्यम से पाया जाएगा:

 $('#XXX + label'); 

आप भी लागू कर सकते हैं। एक jQuery चेकबॉक्स तत्व से लेबल लौटने के लिए ('+ लेबल') खोजें, यानी उपयोगी जब पाशन:

 $('input[type=checkbox]').each( function(){ $(this).find('+ label'); }); 
 document.querySelector("label[for=" + vHtmlInputElement.id + "]"); 

अन्य सभी उत्तर बेहद पुरानी हैं !!

तुमको बस यह करना है:

 input.labels 

एचटीएमएल 5 पहले से ही कई वर्षों के लिए सभी प्रमुख ब्राउज़रों द्वारा समर्थित किया गया है इसमें बिल्कुल कोई कारण नहीं है कि आपको यह स्वयं को खरोंच से या पॉलीफिल से करना चाहिए था! सचमुच input.labels उपयोग input.labels और यह आपकी सभी समस्याओं को हल करता है