JQuery के साथ एक तत्व की आईडी बदलना


302

मुझे jQuery का उपयोग करके एक तत्व की आईडी बदलने की आवश्यकता है।

जाहिरा तौर पर ये काम नहीं करते हैं:

jQuery(this).prev("li").attr("id")="newid"
jQuery(this).prev("li")="newid"

मुझे पता चला कि मैं इसे निम्न कोड के साथ बना सकता हूं:

jQuery(this).prev("li")show(function() {
    this.id="newid";
});

लेकिन यह मुझे सही नहीं लगता। एक बेहतर तरीका होना चाहिए, नहीं? इसके अलावा, अगर ऐसा नहीं है, तो मैं दिखाने / छिपाने या अन्य प्रभावों के बजाय किस अन्य विधि का उपयोग कर सकता हूं? जाहिर है कि मैं हर बार तत्व को दिखाना / छिपाना या प्रभावित नहीं करना चाहता, बस इसकी आईडी को बदलना है।

(हाँ, मैं एक jQuery नौसिखिया हूँ।)

संपादित करें
मैं इस मामले में कक्षाओं का उपयोग नहीं कर सकता, मुझे आईडी का उपयोग करना होगा।


5
जावास्क्रिप्ट में, आप एक चर ( foo = 1), एक वस्तु के एक सदस्य ( foo.bar = 2या foo['bar'] = 2) या एक सरणी सबस्क्रिप्ट ( foo[0] = 3) के लिए असाइन कर सकते हैं, लेकिन एक अभिव्यक्ति को असाइन करना, जैसे ऑपरेटर ( (x + b) = 5) या एक फ़ंक्शन कॉल के परिणाम ( foo() = 1, foo(x).bar(y) = 7) का कोई मतलब नहीं है, इसलिए यह निश्चित रूप से नहीं है जिस तरह से चीजें jQuery या किसी अन्य जावास्क्रिप्ट पुस्तकालय में काम करती हैं।
rakslice

जवाबों:


520

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

jQuery(this).prev("li").attr("id","newId");

4
मुझे लगता है कि newId कोट्स में होना चाहिए
Jay Corbett

5
क्या आपको DOM से तत्व को अलग करने की आवश्यकता नहीं है और इसे नए तत्व के साथ एक नई आईडी के साथ बदलने की आवश्यकता है? डोम तोड़ने से बचने के लिए ...?
क्लैपसे

15
jQuery उस की देखभाल करता है, मुर्गा।
मैकफरीनम

15
डबल आईडी आईडी पुनर्मूल्यांकन के लिए यहां पहुंचे - क्या .prop( ... )इसके बजाय अब होना चाहिए .attr( ... )?
कार्ल

2
नवीनतम jQuery डॉक्स और उदाहरण के अनुसार @Carl, idतब भी उसका उपयोग सेट किया जाना चाहिएattr(...)
JoeBrockhaus

71

इस तरह .attrसे उपयोग करने के लिए एक पूर्वनिर्मित विकल्प है .prop:

$(this).prev('li').prop('id', 'newId');

.attrतत्व के गुण को फिर से .propप्राप्त करता है जबकि गुण को संदर्भित करता है जो विशेषता संदर्भ (यानी जो आप वास्तव में संशोधित करने का इरादा कर रहे हैं )


4
.attr को पदावनत कर दिया गया है - यह करने का सही तरीका है।
प्वाइंटलेसस्पाइक

7
यह जानकारी कहां से आती है? api.jquery.com/attr प्रतिवाद बारे में कुछ नहीं कहते हैं ...
Sergej

यह पदावनत नहीं है। " JQuery 1.6 के रूप में , .prop()विधि संपत्ति के मूल्यों को स्पष्ट रूप से पुनर्प्राप्त करने का एक तरीका प्रदान करती है, जबकि .attr()विशेषताओं को पुनः प्राप्त करती है।"
इल्लुमिनेटर

@Illuminator मैंने अपने उत्तर को उसी के अनुसार सही किया। धन्यवाद।
जेरेमी मोरित्ज़

45

आपका क्या मतलब है:

jQuery(this).prev("li").attr("id", "newID");

वह आईडी को नई आईडी पर सेट करेगा


11

मैंने इस निर्माण के साथ भी कुछ ऐसा ही किया है

$('li').each(function(){
  if(this.id){
    this.id = this.id+"something";
  }
});

7

मुझे यकीन नहीं है कि आपका लक्ष्य क्या है, लेकिन क्या इसके बजाय addClass का उपयोग करना बेहतर हो सकता है? मेरा मतलब है कि मेरी राय में एक वस्तु आईडी स्थिर और उस वस्तु के लिए विशिष्ट होनी चाहिए। यदि आप इसे केवल पृष्ठ पर दिखाने से बदलने की कोशिश कर रहे हैं या ऐसा कुछ है जो मैं उन विवरणों को एक कक्षा में रखूंगा और फिर इसे ऑब्जेक्ट में जोड़ दूंगा, फिर इसे आईडी बदलने की कोशिश कर रहा हूं। फिर से, मैं कह रहा हूं कि बिना अपने लक्ष्य को समझे।


3
विरासत प्रणालियों की खुशियाँ - मैं आपका दर्द समझता हूँ। एरण उत्तर निश्चित रूप से सबसे अच्छा है।
टिम नाइट

5
यदि आप HTML में छिपे हुए टेम्प्लेट का उपयोग करके DOM का निर्माण कर रहे हैं और फिर उन्हें jquery का उपयोग करके क्लोन कर रहे हैं तो वास्तव में आईडी सेट करना एक उपयोगी और सार्थक बात है।
स्टीव नाइट


2
<script>
       $(document).ready(function () {
           $('select').attr("id", "newId"); //direct descendant of a
       });
</script>

यह सभी उद्देश्य के लिए कर सकता है। बस अपने बॉडी क्लोजिंग टैग से पहले जोड़ें और Jquery.min.js को जोड़ने के लिए न करें


0

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

$("#myId").on("click", function() {});

अगर आईडी अब # myID123 में बदल गई है, तो ऊपर दिया गया फ़ंक्शन अब मेरे अनुभव से सही ढंग से काम नहीं करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.