删除变量值中的选择器条件

时间:2016-12-19 04:50:28

标签: javascript jquery

我正在创建一个在线商店,其中包含指向产品的特定链接例如http://example.com/products/phones/nexus-5)。

我使用以下代码,

var get_product_availability_classname = $("[class$='_availability']").attr('class');

选择(创建值为的变量)具有以" _availability"结尾的类的元素。

每个产品页面在_availability之前都有不同的文字,例如GOOGLENEXUS5_availabilitySAMSUNG4KTV_availabilitywhatever_availability ......

我现在必须做的是基本上删除我用来获得整个班级名称的标准( class$='_availability');使用上面的示例,可以将其从SAMSUNG4KTV_availability修剪为SAMSUNG4KTV

可能的解决方案

我还没想过怎么做,但我们可以使用JavaScript的substring()或substr()。

4 个答案:

答案 0 :(得分:1)

使用attr()方法进行回调,并使用String#replace方法使用word boundary regex更新类名。

虽然使用attribute contains selector,因为有可能有多个类,在这种情况下,类可以在开始时或两个类之间。

var get_product_availability_classname = $("[class*='_availability '],[class$='_availability']");

get_product_availability_classname.attr('class',function(i,v){
   return v.replace(/_availability\b/g,'');
});

var get_product_availability_classname = $("[class*='_availability '],[class$='_availability']");

get_product_availability_classname.attr('class', function(i, v) {
  return v.replace(/_availability\b/, '');
});

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

<div class="abc_availability"></div>
<div class="abc_availability class"></div>
<div class="class abc_availability"></div>
<div class="class abc_availability class1"></div>

答案 1 :(得分:1)

如果类名中只有一个_

var get_product_availability_classname = $("[class$='_availability']").attr('class')
.split(' ') // split the class to individual classes
.filter(function(cls) { // filter ones with _availability
    return cls.split('_').pop() == 'availability');
})[0]; // use first match
var product = get_product_availability_classname.split('_')[0]

.split('_')创建数组["PRODUCT", "availability"][0]选择此数组的第一项

或者你也可以

var product = get_product_availability_classname.split('_availability')[0]

这会做同样的事情,除了它在字符串_availability上拆分,并且前缀中有多少_无关紧要

答案 2 :(得分:1)

在这种情况下,最好使用正则表达式。以下将在类字符串中查找_availability,如果找到它,它将捕获之前的内容。

var get_product_availability_classname = $("[class$='_availability']").attr('class');

var matches = /([^\s]*)_availability\b/g.exec(get_product_availability_classname)

if(matches.length > 1){
    var your_id = matches[1];
}

答案 3 :(得分:0)

如果您的字符串始终采用x_y格式,其中x和y不包含下划线,则可以使用split函数拆分下划线。

    var str = "SAMSUNG4KTV_availability";
    var result = str.split("_")[0];
    console.log(result);

split函数返回一个字符串数组,其中包含每个下划线之间的子字符串,使用[0]选择数组中的第一个元素。