Удалить часть значения атрибута с помощью jquery или javascript - PullRequest
0 голосов
/ 02 декабря 2011

Для элемента div существует параметр данных, который выглядит следующим образом:

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

Я хочу удалить из start до конца второй даты из этого атрибута data-params.Там может быть или не быть текста до start и после даты после второй даты.

Как я могу сделать это с помощью javascript или jQuery?Я знаю, как получить значение атрибута «data-params» и как его установить, я просто не уверен, как удалить только эту часть из строки.

Спасибо!

Примечание: даты не всегда будут одинаковыми.

Ответы [ 3 ]

2 голосов
/ 02 декабря 2011

Я бы использовал регулярное выражение :

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 голос
/ 02 декабря 2011

Скажем, у вас есть 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"]
1 голос
/ 02 декабря 2011

Мои навыки регулярных выражений не так хороши, но это должно сработать

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 поставят первую группуи вторая группа соответствует вашему обязательному тексту, убирая начальный / конечный материал посередине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...