使用jquery或javascript删除部分属性值

时间:2011-12-01 22:26:18

标签: javascript jquery string replace html

div的数据参数如下所示:

<div data-params="[possibleText&]start=2011-11-01&end=2011-11-30[&possibleText]">
</div>

我想从第二个日期结束时从{data-params属性中删除start。在start之前和第二次约会之后的日期之后可能会有或可能没有文字。

如何使用javascript或jQuery实现此目的?我知道如何获取“data-params”属性的值以及如何设置它,我只是不确定如何从字符串中删除该部分。

谢谢!

注意:日期并不总是相同。

3 个答案:

答案 0 :(得分:2)

我使用regular expression

var text = $('div').attr('data-params');
var dates = text.match(/start=\d{4}-\d{2}-\d{2}&end=\d{4}-\d{2}-\d{2}/)[0]

// dates => "start=2011-11-01&end=2011-11-30"

正则表达式不太复杂。符号\d表示“匹配任何数字”,\d{4}表示“恰好匹配4位数字”。其余的是字面字符。所以你可以看到它是如何工作的。最后,最后[0]是因为javascript match返回一个数组,其中第一个元素是整个匹配,其余元素是子组。我们没有任何子组,我们确实需要整个匹配,所以我们只抓取第一个元素,因此[0]

如果您想拉出实际日期而不是完整的查询字符串,可以通过在所需部分周围添加括号来创建要匹配的子组,如下所示:

var dates = text.match(/start=(\d{4}-\d{2}-\d{2})&end=(\d{4}-\d{2}-\d{2})/)

// dates[0] => "start=2011-11-01&end=2011-11-30"
// dates[1] => "2011-11-01"
// dates[2] => "2011-11-30"

此处,dates[1]是开始日期(基于括号的第一个子组),dates[2]是结束日期(第二个子组)。

答案 1 :(得分:1)

我的正则表达能力不是那么好但是应该这样做

var txt = "[possibleText&]start=2011-11-01&end=2011-11-30[&possibleText]";
var requiredTxt = txt.replace(/^(.*)start=\d{4}-\d{2}-\d{2}&end=\d{4}-\d{2}-\d{2}(.*)$/, "$1$2");

我确信有更好的方法可以将你的字符串与正则表达式匹配,但是1美元和2美元会将第一组和第二组匹配到你的requiredTxt中去掉中间的开始/结束内容。

答案 2 :(得分:1)

假设您在变量data-params中拥有foo。请按以下方式致电foo.match

foo.match("[\\?&]start=([^&#]*)"); //returns ["&start=2011-11-01", "2011-11-01"]
foo.match("[\\?&]end=([^&#]*)"); //returns ["&end=2011-11-30", "2011-11-30"]