繁体   English   中英

使用jQuery或JavaScript删除部分属性值

[英]Remove part of attribute value with jquery or javascript

div的数据参数如下所示:

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

我想从该data-params属性中删除从第二个日期start到第二个日期的结束。 start日期之前和第二个日期之后的日期之后可能没有文本。

如何使用JavaScript或jQuery完成此操作? 我知道如何获取“数据参数”属性的值以及如何对其进行设置,但我不确定如何从字符串中仅删除该部分。

谢谢!

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

我会使用正则表达式

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]是结束日期(第二个子组)。

我的正则表达式技能不是很好,但这应该可以做到

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中,以去除中间的开始/结束内容。

假设您将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"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM