जावास्क्रिप्ट में .trim () IE में काम नहीं कर रहा है


460

मैंने .trim()अपने एक जावास्क्रिप्ट प्रोग्राम में स्ट्रिंग को लागू करने की कोशिश की । यह मोज़िला के तहत ठीक काम कर रहा है, लेकिन जब मैं IE8 में कोशिश करता हूं तो एक त्रुटि प्रदर्शित होती है। क्या किसी को पता है कि यहां क्या चल रहा है? वहाँ वैसे भी मैं इसे IE में काम कर सकते हैं?

कोड:

var ID = document.getElementByID('rep_id').value.trim();

त्रुटि प्रदर्शन:

संदेश: ऑब्जेक्ट इस संपत्ति या विधि का समर्थन नहीं करता है
लाइन: 604
चार: 2
कोड: ०
URI: http: //test.localhost/test.js

2
मैं नहीं देख सकता कि आपके कंप्यूटर पर क्या संग्रहीत है। क्या आप स्टोरेज वेबसाइट पर test.js अपलोड कर सकते हैं? इसके अलावा, मुझे वास्तविक ट्रिम () फ़ंक्शन को देखने की आवश्यकता है कि क्या गलत है। धन्यवाद!
वार्टी

6
"whatever ".trim()IE8 पर @ इटज़ार्टी ने कोशिश की।
डेन रोसेनस्टार्क


8
मैं IE8 संगतता के लिए Googled trim(), और मेरी आँखों पर विश्वास नहीं होगा जब मुझे लगा कि यह असमर्थित है। इसे साफ़ करने के लिए धन्यवाद। आप जैसा पूछ रहे थे मैं वैसा ही पूछ रहा था।
मथियास लीकेगार्ड लोरेनजेन

जवाबों:


773

स्ट्रिंग में ट्रिम कार्यक्षमता जोड़ने के लिए निम्न कोड जोड़ें।

if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}

8
अच्छा उत्तर। ध्यान दें कि फ़ायरफ़ॉक्स 2 की replace(/^\s\s*/, '').replace(/\s\s*$/, '')तुलना replace(/^\s+|\s+$/, '')में लगभग 3 गुना अधिक तेज़ होना चाहिए , एक बेंचमार्क के अनुसार: blog.stevenlevithan.com/archives/faster-trim-javascript
डैनियल

92
ध्यान दें कि replace(/^\s+|\s+$/, '')केवल प्रमुख या अनुगामी रिक्त स्थान को हटाता है, जो कि ट्रिम फ़ंक्शन से अपेक्षित व्यवहार नहीं है। यदि आप अग्रणी और अनुगामी दोनों स्थानों को हटाना चाहते हैं, तो आपको इसका उपयोग करना होगा replace(/^\s+|\s+$/g, '')
मैसिमिलियानो फ्लरी

1
मेरे लिए थोड़ा मूर्खतापूर्ण लगता है। क्या प्रत्येक js फ्रेमवर्क एक उपयोगिता ट्रिम () फ़ंक्शन प्रदान नहीं करता है? यदि यह एकमात्र मुद्दा है जो आपके पास है, तो ठीक है, लेकिन बहुत सारे तरीके हैं जो IE "अलग" है जो लाइब्रेरी को कम-समय में लायक बना देगा।
स्टीफन

6
@Stephen हाँ आप सही हैं, लेकिन सवाल फ्रेमवर्क के बारे में नहीं है। यह जावास्क्रिप्ट और ट्रिम के बारे में है।
बेन रोवे

3
यदि आप jQuery का उपयोग नहीं करते हैं तो यह एक अच्छा समाधान है। लेकिन यदि नहीं, तो $ .trim () एक बेहतर समाधान प्रतीत होता है, क्योंकि यह आपकी स्क्रिप्ट को थोड़ा सरल रखता है।
NLemay

203

ऐसा लगता है कि फ़ंक्शन IE में लागू नहीं है। यदि आप jQuery का उपयोग कर रहे हैं, तो आप $.trim()इसके बजाय ( http://api.jquery.com/jQuery.trim/ ) का उपयोग कर सकते हैं ।


17
अब, मुझे jQuery बहुत पसंद है, लेकिन इसे सिर्फ .trim के लिए आयात करना () ओवरकिल लगता है
Erik

71
मैं सहमत हूँ। इसलिए मैंने कहा "अगर आप jQuery का उपयोग कर रहे हैं ..." =)
1

@ क्या यह केवल IE मुद्दा है जिन में चलाने जा रहा है? लाइब्रेरी के ब्राउज़र सेनिटेशन फ़ंक्शंस का उपयोग किए बिना मैं बहुत उपयोगी जावास्क्रिप्ट नहीं लिख सकता हूं।
स्टीफन

8
कृपया ध्यान दें कि $ .trim () $ से अलग है (<तत्व> .val।) (ट्रिम) () - अधिक जानकारी यहां: stackoverflow.com/questions/4315570/…
sami

57

jQuery:

$.trim( $("#mycomment").val() );

कोई उपयोग करता है $("#mycomment").val().trim();लेकिन यह IE पर काम नहीं करेगा।


1
एक सही जवाब के लिए धन्यवाद, जिसने हमें इस सड़े हुए पुराने पुराने ब्राउज़र-ब्रिज पर यहाँ कई सिरदर्द बचाए हैं
Awerealis

1
JQuery का एक शानदार उदाहरण।
एंड्रयू प्लमर

क्या वह विधि पार ब्राउज़र है, सर?
टाह

2
@toha, क्रॉस ब्राउज़र jQuery के
Raystorm

सही करें सर। मेरा अनुमान। धन्यवाद
toha

34

दुर्भाग्य से ट्रिम के लिए क्रॉस ब्राउज़र जावास्क्रिप्ट समर्थन नहीं है ()।

यदि आप jQuery (जिसमें एक .trim () विधि है) का उपयोग नहीं कर रहे हैं, तो आप स्ट्रिंग्स में ट्रिम समर्थन जोड़ने के लिए निम्न विधियों का उपयोग कर सकते हैं:

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
    return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
    return this.replace(/\s+$/,"");
}


8

मेरे पास एक समान मुद्दा था जब एक इनपुट से एक मूल्य को ट्रिम करने की कोशिश की और फिर पूछा कि क्या यह कुछ भी नहीं के बराबर था:

if ($(this).val().trim() == "")

हालाँकि, इसने IE6 के लिए काम करने वाले एक स्पैनर को फेंक दिया - 8. पर्याप्त रूप से मैंने ऐसा करने की कोशिश की, जैसे:

   var originalValue = $(this).val();

हालाँकि, jQuery की ट्रिम विधि का उपयोग करते हुए, सभी ब्राउज़रों में मेरे लिए पूरी तरह से काम करता है ।।

var originalValueTrimmed = $.trim($(this).val());              
            if (originalValueTrimmed  == "") { ... }

5

मैंने ट्रिम कार्यक्षमता को लागू करने के लिए कुछ कोड लिखे हैं।

LTRIM (बाएं ट्रिम):

function ltrim(s)
{
    var l=0;
    while(l < s.length && s[l] == ' ')
    {   l++; }
    return s.substring(l, s.length);
} 

आरटीआरआईएम (सही ट्रिम करें):

function rtrim(s)
{
    var r=s.length -1;
    while(r > 0 && s[r] == ' ')
    {   r-=1;   }
    return s.substring(0, r+1);
 }

TRIM (दोनों पक्षों को ट्रिम करें):

function trim(s)
{
    return rtrim(ltrim(s));
}

या

नियमित अभिव्यक्ति भी उपलब्ध है जिसका हम उपयोग कर सकते हैं।

function trimStr(str) {
  return str.replace(/^\s+|\s+$/g, '');
}

उपयोगी स्पष्टीकरण


3
अपने पुराने स्कूल खोज और कोड को नष्ट प्रबंधन नहीं करती है \t, \r, \nऔर इस तरह के। केवल spaces। Regexp बेहतर है यदि आप ऐसा महसूस नहीं करते हैं कि वास्तव में सब कुछ मैन्युअल रूप से संभालने के प्रयास में है।
कोडएग्री

4

हम इंटरनेट से आधिकारिक कोड प्राप्त कर सकते हैं! इसे देखें:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim

किसी अन्य कोड से पहले निम्नलिखित कोड चलाना ट्रिम () पैदा करेगा यदि यह मूल रूप से उपलब्ध नहीं है।

if (!String.prototype.trim) {
  (function() {
    // Make sure we trim BOM and NBSP
    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
    String.prototype.trim = function() {
      return this.replace(rtrim, '');
    };
  })();
}

अधिक के लिए: मुझे अभी पता चला है कि EcmaScript 5 को सपोर्ट करने के लिए js प्रोजेक्ट है। https://github.com/es-shims/es5-shim सोर्स कोड को पढ़कर हम ट्रिम के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

defineProperties(StringPrototype, {
 // http://blog.stevenlevithan.com/archives/faster-trim-javascript
 // http://perfectionkills.com/whitespace-deviations/
  trim: function trim() {
    if (typeof this === 'undefined' || this === null) {
      throw new TypeError("can't convert " + this + ' to object');
    }
    return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
  }
}, hasTrimWhitespaceBug);

3

मुझे नहीं लगता trim()कि जावास्क्रिप्ट मानक में कोई मूल विधि है। शायद मोज़िला एक की आपूर्ति करता है, लेकिन यदि आप IE में एक चाहते हैं, तो आपको इसे स्वयं लिखना होगा। इस पृष्ठ पर कुछ संस्करण हैं ।


3

IE9 में मुझे भी यही समस्या थी लेकिन जब मैंने पहली पंक्ति में निम्नलिखित टैग के साथ समर्थित html संस्करण घोषित किया था

<!DOCTYPE html>
<HTML>
<HEAD>...
.
.

समस्या का समाधान हो गया।


1

यह टाइपो त्रुटि getElementBy आईडी के कारण है । इसे getElementById में बदलें


0
var res = function(str){
    var ob; var oe;
    for(var i = 0; i < str.length; i++){
        if(str.charAt(i) != " " && ob == undefined){ob = i;}
        if(str.charAt(i) != " "){oe = i;}
    }
    return str.substring(ob,oe+1);
}

1
जब आप साधारण प्रतिस्थापन का उपयोग कर सकते हैं तो एक लूप क्यों होता है, जब इसका समय खराब होता है, तब भी बहुत बुरा होता है, इस विधि को औसत आकार के पाठ पर 200 बार कॉल करने का प्रयास करें और jQuery द्वारा प्रदान किए गए अन्य कार्यान्वयन को कॉल करें और आप देखेंगे कि मैं किस बारे में बात कर रहा हूं: )
दानी खलीफा

1
क्योंकि कुछ मामलों में एक लूप regexp से तेज है। लिंक देखें जो JW ने अपने जवाब में कुछ बेंचमार्क के लिए पोस्ट किया था, विशेष रूप से वहाँ टिप्पणियाँ (क्योंकि मूल बेंचमार्क काफी पुराना है)।
एरिक

0

बस पता चला कि IE ने trim()हाल ही में विंडोज़ अपडेट के बाद, समर्थन करना बंद कर दिया है । यदि आप डोजो का उपयोग करते हैं, तो आप उपयोग कर सकते हैं dojo.string.trim(), यह क्रॉस प्लेटफॉर्म का काम करता है।


0

यह समस्या इंट्रानेट साइटों पर संगतता मोड का उपयोग करके IE के कारण हो सकती है। इसे हल करने के दो तरीके हैं, या तो आप अपने स्थानीय मशीन पर संगतता मोड का उपयोग न करने के लिए IE को अपडेट कर सकते हैं (IE11 में: उपकरण-> संगतता दृश्य सेटिंग -> संगतता दृश्य में इंट्रानेट साइटों को अनचेक करें)

बेहतर अभी तक आप अपने वेबपेज में मेटा टैग को अपडेट कर सकते हैं। जोड़ें:

...
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...

इसका क्या मतलब है? यह IE को नवीनतम संगतता मोड का उपयोग करने के लिए कह रहा है। अधिक जानकारी MSDN में उपलब्ध है : विरासत दस्तावेज़ मोड निर्दिष्ट करना

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