如何删除查询字符串的某些元素?

时间:2015-05-22 08:22:50

标签: javascript

我正在编写一个脚本,在其中传递一个类似/search?filter1=question-1&filter2=question2的网址,当更改了问题1或问题2时,它将采用网址,并替换{{1}带有问题值。

我想要构建的一件事是,如果值为空,我希望它删除查询字符串部分。例如,如果问题1的值为question-x,但2还没有值,则网址将为something

我认为可行的是这样的

/search?filter1=something

但是返回null。任何人都可以帮我弄清楚我需要改变什么来获得我想要的输出吗?

2 个答案:

答案 0 :(得分:1)

  

鉴于url / search?filter = question-1,我需要查看名称为问题[1]的元素是否有值,如果有,则将问题1替换为值,如果不是&# 39; t有一个,删除total filter = question-1 string。

从评论中更好地了解您的要求,我使用原始答案的部分内容和部分代码完全重写了我的答案:

$keys = array_keys($_REQUEST);
$shift = array_shift($keys);

同样,这是从我原来的答案中重新设计的,所以会有一些膨胀,但我不想放弃你的问题。

答案 1 :(得分:0)

虽然Drakes的答案很好,但它并不适合我的需要。我最终得到了这个,到目前为止效果很好,但我还在测试它。

var $url = '/search?filter1=question-1&filter2=question-2';

// Break the url into parts.
var $split = $url.split(/([&?])/);

$.each($split, function(indexToRemove, part){

    // If the part is a question.
    if(typeof part == 'string' && part.indexOf('question-') > -1){

        var $number = part.split('=');

        // Turns question-number into question[number] so it's a valid selector.
        $inputSelector = String($number[1]).replace('-', '[') + ']';

        // Get the input, and the value.
        var $input = $('[name="' + $inputSelector + '"]');
        var $value = getValue($input.closest('.question'));



        // If there is an element, and there is a value.
        if($input.length > 0 && ($value != '' && $value != undefined)){

            $split[indexToRemove] = part.replace($number[1], $value);
        } else {

            $split.splice(indexToRemove, 1);
        }
    }
});


$url = $split.join('');

// If for example question-1 has a value of 'Test', and question-2 has no value, $url will now be '/search?filter1=Test'.