[英]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.