IE8 vs. js String.prototype
2011-10-14T08:03:34+02:00
2011-10-14T10:50:40+02:00
2022-07-19T04:37:31+02:00
  • Lehet, hogy kicsit elvetettem a sulykot, nem a String.prototype nem működött az IE8-ban, hanem az arguments nem tömb, ettől függetlenül a Chrome és az FF is simán joinolja, de az IE nem.
    Tehát át kell alakítani az arguments-et tömbbé.
    A megoldás:

    String.prototype.insertTemp = function(){ var s = this; var a = Array.prototype.slice.call(arguments); for(var i in a){ s=s.split('{..'+(parseInt(i,10)+1)+'}').join(a[i]);} return s; }; document.body.innerHTML = "Nehogy már a {..2} vigye a {..1}".insertTemp("puskát!","nyúl");

    vagy nem for in-el kell végiglépkedni rajta.

    String.prototype.insertTemp = function(){
    for(var s=this,i=0;i<arguments.length;i++){ s=s.split('{..'+(parseInt(i,10)+1)+'}').join(arguments);} return s;
    };

    document.body.innerHTML = "Nehogy már a {..2} vigye a {..1}".insertTemp("puskát!","nyúl");

    Mutasd a teljes hozzászólást!
  • Ó, hogy a mókusok kergessék körbe az egyenlítő körül az IE-t.

    Azt már megszoktam, hogy ahány böngésző annyi fajta CSS, és még az IE9 is csak a felét tudja a CSS3-nak. A régebbiek pedig köszönő viszonyban sincsenek a többi böngésző CSS implementációjával.

    De arra nem gondoltam, hogy a js-t is eltérő módon értelmezi az IE8, mint a többiek.

    Csináltam egy hasznos kis template függvényt ami működik is mindenhol (kivéve IE8!), és hála a prototype lehetőségének, egészen szépen templateString.insertTemp(arguments...) formában lehet használni.

    Csak ugye az IE megint külön utakon jár. Talán majd az IE10-ben már tényleg minden működni fog, különben felejtsék is el,hogy a Windows8-nak köze lenne a html5-höz.

    String.prototype.insertTemp = function(){ var s = this; for(var i in arguments){ s=s.split('{..'+parseInt(parseInt(i,10)+1,10)+'}').join(arguments[i]); } return s; }; document.body.innerHTML = "Nehogy már a {..2} vigye a {..1}".insertTemp("puskát!","nyúl");

    Persze van általános megoldás, csak a hagyományos zárójelezés miatt szerintem nem olyan praktikus, de ez egyéni szocproblem.

    function insert(s){ for(var i=1;i<arguments.length;i++){ s=s.split('{..'+parseInt(parseInt(i,10),10)+'}').join(arguments[i]);} return s; }
    Mutasd a teljes hozzászólást!
abcd