Estoy tratando de implementar una variable en una cadena. He buscado esto y he intentado arrojarle cosas diferentes, pero nada parece funcionar ...

Tengo una variable que se ve así:

http:localhost:8080/Editor/?name=Default 

No tengo ningún problema para obtener el valor usando:

function getQueryVariable(variable) {
                var query = window.location.search.substring(1);
                var vars = query.split("&");
                for (var i = 0; i < vars.length; i++) {
                    var pair = vars[i].split("=");
                    if (pair[0] == variable) { return pair[1]; }
                }
                return (false);
            }

            var name = getQueryVariable("name")

Ahora tengo una cadena que carga una página que se ve así:

 HMI.Builder.init('Files/HMIBuilder/', function () {
                //run code after page/iframe is loaded
            });

Lo que quiero hacer es agregar la variable a la cadena Archivos / HMIBuilder / {name} Esto no funciona. Necesita terminar luciendo así

Files/HMIBuilder/Default

O cualquier variable que se pase.

3
Scott Purtan 29 oct. 2019 a las 20:33

3 respuestas

La mejor respuesta

Tendrá que concatenar su cadena con la variable utilizando el símbolo javascript +, como se muestra a continuación:

HMI.Builder.init('Files/HMIBuilder/' + getQueryVariable("name"), function () {
  //run code after page/iframe is loaded
});

O use el práctico replace para mayor legibilidad:

HMI.Builder.init('Files/HMIBuilder/{name}'.replace('{name}', getQueryVariable("name")), function () {
  //run code after page/iframe is loaded
});

Por supuesto, podría hacerlo con dos pasos para una mayor legibilidad:

var route = 'Files/HMIBuilder/{name}'.replace('{name}', getQueryVariable("name"));
HMI.Builder.init(route, function () {
  //run code after page/iframe is loaded
});

Finalmente, en navegadores recientes (y con algunos transpiladores para compatibilidad con versiones anteriores), puede usar la sintaxis "` "de ES6:

var route = `Files/HMIBuilder/${getQueryVariable("name")}`;
HMI.Builder.init(route, function () {
  //run code after page/iframe is loaded
});
4
guillaumepotier 29 oct. 2019 a las 17:42

Usar una plantilla literal

HMI.Builder.init(`Files/HMIBuilder/${getQueryVariable(variable)}`, function () {

            //run code after page/iframe is loaded
        });
2
Jay Lane 29 oct. 2019 a las 17:37

Puede obtener una lista de parámetros ejecutando la siguiente función

function extractParams(url) {
    new URL(url).search.substr(1).split('&').map(x => {
        var y = x.split('=');
        return { [y[0]]: y[1] };
    });
}

var params = extractParams('https://www.website.com?id=151&name=john');

Lo que imprimiría lo siguiente

[{id: 151}, {name: "john"}]

0
Oussama Essamadi 29 oct. 2019 a las 17:48