Javascript,使用URL查询字符串创建页面标题

时间:2018-09-06 12:42:49

标签: javascript

我将根据其URL查询字符串创建页面标题

URL示例为:

void next_step(std::vector<std::string> &a)
{
    std::vector<std::string> v;
    v.swap(a);
    // process vector ...
}

如果max_price = 50000,我的页面标题将是:低于500,000卢比的电话

如果URL仅包含以下品牌:

domain.com/pricelist/phones/?min_price=0&max_price=50000

页面标题将是:Apple手机价格表2018

如果URL同时包含价格和品牌,例如:

domain.com/pricelist/phones/?brand=apple

页面标题:价格低于50000卢比的Apple手机

这是我的代码:-

domain.com/pricelist/phones/?min_price=0&max_price=50000&brand=apple

3 个答案:

答案 0 :(得分:0)

我认为,由于脚本的整体复杂性,您很难处理if/else语句。尝试使其更简单,构建条件将变得轻而易举。 我尚未对其进行测试,但请查看此解决方案:

function setTitle () {
  const search = window.location.search
    .substring(1)
    .split('&')
    .map(pair => pair.split('='))
    .reduce((acc, pair) => {
      acc[pair[0]] = pair[1];
      return acc;
    }, {});

  const brandPart = search.brand ? `${search.brand} phones` : 'Phones';
  const maxPricePart = search.max_price ? `under Rs.${search.max_price}` : '';
  const pricePart = maxPricePart || 'Price list 2018';

  document.title = `${brandPart} ${pricePart}`;
}

也许它有一些问题,但是它更容易理解和维护。

答案 1 :(得分:0)

您的代码看起来不错,我认为您可以改进或 作为替代解决方案,您可以首先创建所有查询参数的JSON格式。 而且基于JSON,您可以轻松创建品牌名称。

https://gomakethings.com/getting-all-query-string-values-from-a-url-with-vanilla-js/

//get query paraeters in json format
  var getParams = function (url) {
    var params = {};
    var parser = document.createElement('a');
    parser.href = url;
    var query = parser.search.substring(1);
    var vars = query.split('&');
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        params[pair[0]] = decodeURIComponent(pair[1]);
    }
    return params;
};
//get quer pareamaeter
var query_parameters = getParams(window.location.href);
var brand_name = '';
if ( query_parameters.max_price ) brand_name ="Phones Under Rs." + query_parameters.max_price;
if ( query_parameters.brand ) brand_name = query_parameters.brand.toUpperCase() + " phones Price list 2018"
if ( query_parameters.max_price && query_parameters.brand ) brand_name =query_parameters.brand.toUpperCase() + "phones Under Rs." + query_parameters.max_price;

答案 2 :(得分:0)

首先,(我认为)我会尽量避免使用正则表达式。如果您还没有听说过URL Search Params,则应该仔细阅读。这使得处理查询字符串非常简单。

我还更改了大小写,使其也不再使用正则表达式(来源为this answer

现在开始使用if语句,似乎您遇到了麻烦,请尝试将其逐步分解。

首先,我看maxPrice是否不为null,如果不为null,那么很好,我们有了第一个标题:Phones Under Rs.${maxPrice}

接下来,我检查brand是否不为空(在maxPrice if内),如果brand不是null,我们可以安全地假设{{ 1}}也不是maxPrice,因此我们可以将消息更改为null

现在,既然完成了在消息中只有2个变量的唯一情况,我们可以从第一个${brand} Phones Under Rs.${maxPrice}跳回并继续向下移动到if。现在,我检查else if是否不是brand。如果null不是brand,那么在这一点上,我们可以假设null也是maxPrice(否则代码将进入第一个null),因此这给了我们最后的信息if

现在终于有了一个${brand} Phones案例,以防万一我们错过了一些东西,我们可以记录下来并轻松修复代码。

如果您不熟悉字符串中的反引号Template Literals

,请快速注意

else