如果不为null,Javascript会追加到url

时间:2017-06-08 20:24:12

标签: javascript jquery

如果值不是链接的null,我想附加值。它不允许在字符串中使用if,那么我该怎么做呢?

    var age = $('#age').val();
    var fn = $('#fn').val();
    var ln = $('#ln').val();   
    var city = $('#city').val();
    var country = $('#country').val();

    var link = "https://mysre.com/articles/index.php?title=man-sets-biggest-pizza-record" if(age !=null){ "&age=" + age + } "&fn=" + fn + "&ln=" + ln + "&city=" + city + "&country=" + country;

5 个答案:

答案 0 :(得分:1)

缺乏自己的领域,我想知道这可能不会做你想要的。

 var myFields = {
   age: $("#age").val,
   fn : $("#fn").val,
   ln : $("#ln").val,
   city: $("#city").val(),
   country: $("#country").val()
  }

    var link = "https://mysre.com/articles/index.php?title=man-sets-biggest-pizza-record";
    
    $.each(myFields, function(key, value){
      if(value){
        link += "&"+key+"="+value;
      }
    }

答案 1 :(得分:1)

有很多方法可以解决这个问题。

最明显的就是逐个建立你的链接。

var a = 1;
var b = null;
var c = 5;

var str = '';
if (a) {
  str += a + '&';
}

if (b) {
  str += b + '&';
}

// ... and so on

我更喜欢的一个更清晰的解决方案是将所有内容放入数组或对象中,然后从中构建字符串。

var data = {
    a: 1,
    b: null,
    c: 5
};

var str = 'http://myarray.com/?' + 
  Object.keys(data)
    .filter(function (key) { return data[key] })
    .map(function (key) { return key + '=' + data[key] }).join('&');

Object.keys(data)将为您提供类似['a', 'b', 'c']的数组(来自对象的键)。

filter()将从任何返回真实值的值构建一个新数组。在这种情况下,生成的数组将['a', 'c']'b'被删除,因为它的值为null,这是一个假值。)

然后

map()将遍历其中的每一个,然后根据每个调用的返回值构建一个新数组。这看起来像这样:['a=1', 'c=5']

最后,join('&')会将数组中的所有值连接成一个字符串:a=1&c=5,我们可以将其添加到字符串的其余部分。

另一种选择是在字符串(a ? a : '')中使用三元运算符,但这并不能很好地扩展到很多值。

答案 2 :(得分:0)

使用ternary operator,它就像(expression ? value if true : value if false)

一样简单

不要忘记Javascript' truthyness让你的表情变小!

您还可以利用truthy值的技巧与var || default执行空合并,如果var是假的,则会使用default(这可以链接使用如果你愿意的那些变种

答案 3 :(得分:0)

一种选择是使用三元if

var age = $('#age').val();
var fn = $('#fn').val();
var ln = $('#ln').val();
var city = $('#city').val();
var country = $('#country').val();

var link = "https://mysre.com/articles/index.php?title=man-sets-biggest-penis-record" + (age != undefined ? "&age=" + age : '') + (fn != undefined ? "&fn=" + fn : '')  + (ln != undefined ? "&ln=" + ln : '') + (city != undefined ? "&city=" + city : '') + (country != undefined ? "&country=" + country : '');

console.log(link);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 4 :(得分:0)

我会将所有潜在值放入一个对象中,如果对象值存在且有效,则将对象串部分推送到数组中,然后将这些部分连接到一个真实的查询字符串,然后将其附加到您的网址:

var obj = {
  "age": $('#age').val(),
  "fn": $('#fn').val(),
  "ln": $('#ln').val(),
  "city": $('#city').val(),
  "country": $('#country').val()
};

var arr = [];
for (var k in obj) {
  if (obj[k] || obj[k] === 0) 
    arr.push(k + "=" + encodeURIComponent(obj[k]));
}

var url = "https://penisurl";

if (arr.length) {
  url += "?" + arr.join("&");
}