Dynamically loading or removing an external JavaScript or CSS file

7 במאי 2012

תגיות: , , , ,
אין תגובות


 


המקור לקוד בפוסט זה מגיע מכאן

 

לא מזמן כתבתי אתר קטן, שהיה צריך לתמוך במעבר בין עברית לאנגלית, כמובן שזה תמיד כאב ראש ויש כל מיני שיטות לעשות זאת (בעיקר הבעייה עם שינוי הכיוון)

 

 

בפעם הזאת בחרתי להתמודד עם הבעייה בצורה הבאה:

 

כתבתי קובץ css ובו העיצוב משמאל לימין כמו שצריך להיות באנגלית.

 

כתבתי קובץ css נוסף שבו מופיעים כל השנויים מבחינת העיצוב עבור השפה העברית (align, padding, marging, background וכד')

 

 

כעת במעבר לעברית הפעלתי את הפונקציה הבאה:

 



function loadjscssfile(filename, filetype) {


    if (filetype == "js") { //if filename is a external JavaScript file


        var fileref = document.createElement('script')


        fileref.setAttribute("type", "text/javascript")


        fileref.setAttribute("src", filename)


    }


    else if (filetype == "css") { //if filename is an external CSS file


        var fileref = document.createElement("link")


        fileref.setAttribute("rel", "stylesheet")


        fileref.setAttribute("type", "text/css")


        fileref.setAttribute("href", filename)


    }


    if (typeof fileref != "undefined")


        document.getElementsByTagName("head")[0].appendChild(fileref)


}


 

 

ושלחתי את שם קובץ ה – css של העברית, והיות שקובץ הזה ירד אחרון הוא דרס את כל ההגדרות של קובץ האנגלית.

 

במעבר לאנגלית הפעלתי את הקוד הבא:

 



function removejscssfile(filename, filetype) {


    //determine element type to create nodelist from


    var targetelement = (filetype == "js") ? "script" : (filetype == "css") ? "link" : "none"


 


    //determine corresponding attribute to test for


    var targetattr = (filetype == "js") ? "src" : (filetype == "css") ? "href" : "none"


 


    var allsuspects = document.getElementsByTagName(targetelement)


 


    //search backwards within nodelist for matching elements to remove


    for (var i = allsuspects.length; i >= 0; i–) {


        if (allsuspects[i] &&


            allsuspects[i].getAttribute(targetattr) != null &&


            allsuspects[i].getAttribute(targetattr).indexOf(filename) != -1) {


 


            //remove element by calling parentNode.removeChild()


            allsuspects[i].parentNode.removeChild(allsuspects[i])


        }


    }


}


 

כעת חזרו ההגדרות לפי מה שהוגדר באנגלית.

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *