簡體   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