web-dev-qa-db-fra.com

Erreur .substring: "n'est pas une fonction"

Je ne comprends pas pourquoi je reçois un message d'erreur en utilisant la méthode de sous-chaîne pour déclarer une variable.

Je veux utiliser la première partie de l'URL dans une comparaison.

Site: http://www.elizabet.nl/wordpress

C'est la partie qui ne va pas:

var currentLocation = document.location,
muzLoc = currentLocation.substring(0,45),
prodLoc = currentLocation.substring(0,48), 
techLoc = currentLocation.substring(0,47); 

L'erreur: "CurrentLocation.substring n'est pas une fonction"

Mais cette partie du code convient:

var URL = $(this).attr("href").substring(2) + ' #main';

Tout le code:

jQuery(function($){

    var siteURL = "http://" + top.location.Host.toString() + "/wordpress", // Declareren van URL van de website.
        URL = '', // Declareren van een URL, welke dan ook. 
        currentLocation = '',
        muzLoc = '',
        prodLoc = '',
        techLoc = '',               
        allLinks = $('a[href^=' + siteURL + ']' ), // Declareren van alle menu-links. Het teken ^ betekent 'begint met'.
        otherLinks = $('a[href^=' + siteURL + "/wp-content" + ']'), 
        siteLinks = $(allLinks).not(otherLinks),      
        mainDiv = $("#content"),
        hash = window.location.hash,
        muziekURL = "http://www.elizabet.nl/wordpress/#/muziek_pf/",
        productieURL = "http://www.elizabet.nl/wordpress/#/productie_pf/",
        techniekURL = "http://www.elizabet.nl/wordpress/#/techniek_pf/";    

    if (hash) {
        hash = "/wordpress" + hash.substring(1); // substring methode haalt karakters van je string af. In dit geval de #, vanwege de offset=1.
        URL = hash;
        $(mainDiv).load(URL);           
    }

function pageLoad() {

                var allLinks = $('a[href^=' + siteURL + ']' ),
                otherLinks = $('a[href^=' + siteURL + "/wp-content" + ']'), 
                siteLinks = $(allLinks).not(otherLinks); 

                siteLinks.each(function() {             

                    $(this).attr("href", "#" + this.pathname.substring(10));
                    })

                    .click(function() {
                    var URL = $(this).attr("href").substring(2) + ' #main';
                    $(mainDiv).load(URL, function(){ 

                    var currentLocation = document.location,
                        muzLoc = currentLocation.substring(0,45),
                        prodLoc = currentLocation.substring(0,48), 
                        techLoc = currentLocation.substring(0,47);                  

                if (muzLoc == muziekURL) {              
                $("body").animate({ backgroundColor: "#151C07"}, 500);
                $(".nieuws").animate({ borderBottomColor: "#99CC33"}, 500);  
                $("#stripe_trans").add("#header").animate({ backgroundColor: "#99CC33"}, 500);
                $("#tabtekst_3").stop().animate({ backgroundColor: "#B8860B" }, 500);
                $("#tab_3").add("a.gold").stop().animate({ color: "#B8860B" }, 500);
                $("#tabtekst_4").stop().animate({ backgroundColor: "#765AAD" }, 500);  
                $("#tab_4").add("a.purple").stop().animate({ color: "#765AAD" }, 500);                                    
                }

                else if (prodLoc == productieURL) {     
                $("body").animate({ backgroundColor: "#251B02"}, 500);  
                $(".nieuws").animate({ borderBottomColor: "#FFCC33"}, 500);  
                $("#stripe_trans").add("#header").animate({ backgroundColor: "#FFCC33"}, 500);                  
                $("#tabtekst_2").stop().animate({ backgroundColor: "#6B8E23" }, 500);  
                $("#tab_2").add("a.green").stop().animate({ color: "#6B8E23" }, 500);   
                $("#tabtekst_4").stop().animate({ backgroundColor: "#765AAD" }, 500);  
                $("#tab_4").add("a.purple").stop().animate({ color: "#765AAD" }, 500);
                } 

                else if (techLoc == techniekURL) {      
                $("body").animate({ backgroundColor: "#181223"}, 500);  
                $(".nieuws").animate({ borderBottomColor: "#B39BE4"}, 500);  
                $("#stripe_trans").add("#header").animate({ backgroundColor: "#B39BE4"}, 500);          
                $("#tabtekst_2").stop().animate({ backgroundColor: "#6B8E23" }, 500);  
                $("#tab_2").add("a.green").stop().animate({ color: "#6B8E23" }, 500);                       
                $("#tabtekst_3").stop().animate({ backgroundColor: "#B8860B" }, 500);
                $("#tab_3").add("a.gold").stop().animate({ color: "#B8860B" }, 500);
                } 

                else {
                $("body").animate({ backgroundColor: "#202020"}, 500);  
                $(".nieuws").animate({ borderBottomColor: "#FFF"}, 500);  
                $("#stripe_trans").add("#header").animate({ backgroundColor: "#FFF"}, 500);             
                $("#tabtekst_2").stop().animate({ backgroundColor: "#6B8E23" }, 500);  
                $("#tab_2").add("a.green").stop().animate({ color: "#6B8E23" }, 500);               
                $("#tabtekst_3").stop().animate({ backgroundColor: "#B8860B" }, 500);
                $("#tab_3").add("a.gold").stop().animate({ color: "#B8860B" }, 500);
                $("#tabtekst_4").stop().animate({ backgroundColor: "#765AAD" }, 500);  
                $("#tab_4").add("a.purple").stop().animate({ color: "#765AAD" }, 500);                                          
                }

                pageLoad();
            });             
        });
}

pageLoad();


}); // End document ready function.
28
Hannemaatje

document.location est un objet, pas une chaîne. Il renvoie (par défaut) le chemin d'accès complet, mais contient en réalité plus d'informations que cela.

Raccourci pour la solution: document.location.toString().substring(2,3);

Ou utilisez document.location.href ou window.location.href

36
riffnl

vous pouvez aussi citer des chaînes

''+document.location+''.substring(2,3);
3
dazzafact

TypeError: hex.substring n'est pas une fonction

Résolu:

tu as besoin de faire 

hex = '0x4a6f7264616e0000000000000000000000000000000000000000000000000000'
//because you probably only coppied the hexcode, you need to copy the quotes too
1
luneth777

Vous pouvez utiliser substr

par exemple:

new Date().getFullYear().toString().substr(-2)
0
Vivekanand Panda