【问题标题】:Remove part of attribute value with jquery or javascript使用 jquery 或 javascript 删除部分属性值
【发布时间】:2012-01-11 01:27:42
【问题描述】:

div 有一个 data 参数,如下所示:

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

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

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

谢谢!

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

【问题讨论】:

  • 您要删除除start=2011-11-01&amp;end=2011-11-30 之外的所有内容,还是保留所有内容并删除start=2011-11-01&amp;end=2011-11-30
  • @omarello 保留所有内容并去掉start...11-30
  • 您可能希望在问题中更清楚一点:)

标签: javascript jquery string replace html


【解决方案1】:

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

【讨论】:

  • 谢谢!真的很好解释的答案。我真的很感激!
【解决方案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 中,从而去除中间的开始/结束内容。

【讨论】:

    【解决方案3】:

    假设您在变量foo 中有您的data-params。拨打foo.match如下:

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

    【讨论】:

    • 我的正则表达式比这里的其他正则表达式要简单得多,并且可以从任何类似查询字符串的数据中解析出参数......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多