使用正则表达式我试图从查询字符串中提取数字值。然后获取这些值并在DOM中查找数据值属性等于正则表达式返回结果中的值的元素。
正则表达式
这是我的查询字符串的外观:
var query = location.search;
console.log(query);
//log ?allow=1&paged=0&categories=96,105,25&attr_color=14,98&promotion=monthly
我希望得到正则表达式:
96,105,25,14,98
允许&页面被删除,并且未捕获促销,因为它的值不是数字。
搜索DOM
一旦我拥有了这些值,我想在DOM中搜索元素(任何.list,.checkbox或.option类),这些元素的数据值与正则表达式结果中的值匹配。
以下是基于值匹配的元素的示例标记。
<div class="widget categories">
<!-- match -->
<a href="#" class="list" data-value="96">Pants</a>
<!-- NO match -->
<input class="checkbox" id="shoes" name="shoes" value="false" data-value="123">
<!-- match -->
<input class="checkbox" id="shirts" name="shirts" value="true" data-value="105">
<select name="cat" id="cat">
<option selected="selected" value="">All Categories</option>
<!-- match -->
<option class="option" value="25" data-value="25">Shoes</option>
<!-- NO match -->
<option class="option" value="22" data-value="22">Jackets</option>
</select>
</div>
<div class="widget attribute-color">
<!-- NO match -->
<a href="#" class="list" data-value="55">Blue</a>
<!-- match -->
<input class="checkbox" id="purple" name="purple" value="true" data-value="14">
<select name="colors" id="colors">
<option selected="selected" value="">All Colors</option>
<!-- NO match -->
<option class="option" value="112" data-value="112">Red</option>
<!--match -->
<option class="option" value="98" data-value="98">Yellow</option>
</select>
</div>
的修改
我在使用RegExp时遇到问题。
如果我使用它,则返回null
var regexS = "allow=\d+|paged=\d+|(\d+)(?=,|&)";
var regex = new RegExp( regexS );
var query = regex.exec( location.search );
console.log("query: " + query); // query: null
如果我使用它,它只返回我相信第一个结果
var query = /allow=\d+|paged=\d+|(\d+)(?=,|&)/g.exec( location.search );
console.log("query: " + query); // query: 1,1
修改2
为了处理正则表达式,我最终使用.replace()而不是新的RegExp(无法让它工作,不知道为什么。)
var query = location.search;
var values = '';
query.replace(/allow=\d+|paged=\d+|(\d+)(?=,|&)/g, function(param, match) {
if (match != undefined) {
values += match + ',';
};
});
console.log("values: " + values); // values: 96,105,25,14
我现在遇到的问题是它永远不会返回查询字符串的最后一个数字,因此匹配结果中会忽略 98 。
奇怪的是,如果我使用实际的字符串而不是 location.search ,它会返回最后一个数字:
var query = '?allow=1&paged=0&categories=96,105,25&attr_color=14,98&promotion=monthly';
console.log("values: " + values); // values: 96,105,25,14,98
我尝试过使用 var query = location.search.toString();和 JSON.stringify(location.search)但总是省略最后一位数。
我非常接近这一点,任何帮助都非常感激。
答案 0 :(得分:0)
我假设您使用逗号分隔值"96,105,25,14,98,48"
。使用:
var colorncategories= "96,105,25,14,98,48".split(",");
var elem_colorncategories= $("[data-value='" + colorncategories.join("'],[data-value='") + "']");
答案 1 :(得分:0)