Ориентация на конкретный URL на странице и получение значения - PullRequest
0 голосов
/ 17 июня 2011

Задача

У меня есть скрипт Greasemonkey, и он проверяет DIV, в котором содержатся два HREF.

Я пытаюсь нацелить второй HREF, чтобы получить строку идентификатора места, но я не знаю, как правильно нацелиться на нее, используя RegEx (потому что RegEx всегда делает мою голову).

Второй целевой HREF выглядит следующим образом:

<a href="/venue/X">Venue name</a>
  • При этом X - это числовой идентификатор места проведения.

Пример HTML

<div class="boxContainer">
    <div class="content">
        <h3><img src="https://4sqstatic.s3.amazonaws.com/img/crown-a90b8cffe95be2f88fb5b1c203313a3d.png" height="25" width="25" alt="crown" /><strong><a href="/braskic">Andrew Braskic</a></strong> @ <a href="/venue/4314657">Ascot Car Park</a></h3>
    </div>
</div>

Код пока

Таргетинг выполняется на var venueID , и благодаря моим слабым знаниям в RegEx я не знаю, как получить только второй HREF (пример ниже получает информацию от первого HREF - см. в приведенном выше примере HTML, чтобы увидеть первый HREF в DIV):

var SearchFriendLinks  = $("div.boxContainer div.content > a");


SearchFriendLinks.each (function () {

    var jThis       = $(this);
    var venueID     = jThis.attr ('href').replace (/\D+(\d+)$/, '$1');
    jThis.parent ().append (' (' + venueID + ') ');
    jThis.parent ().append ('<a href="/venue/' + venueID + '/edit">Manage venue</a>');
    jThis.parent ().append ('&nbsp;|&nbsp;');
    jThis.parent ().append ('<a href="/edit_venue?vid=' + venueID + '">Edit venue</a>');
} );

GM_addStyle ( (<><![CDATA[
    div.FriendResult div.name > a + a
    {
        font-size:      0.7em;
        margin-left:    2em;
    }

]]></>).toString () );

1 Ответ

2 голосов
/ 17 июня 2011

Во-первых, следующие $("div.boxContainer div.content > a"); не будут работать, потому что следующим элементом div.content является H3, а не A. Селектор ">" используется для выбора прямого потомка.

Если вы хотите найти какой-либо элемент A, начинающийся с "/ venue /", вы можете сделать это:

// Select all links with the word venue in them
$('a[href^="/venue/"]')

Если планируется добавить ссылки после ссылки на место проведения, вы можете сделать это:

Обновление : я немного обновил приведенный ниже код в соответствии с предложениями @Brock Adams. Я сохранил массив элементов match A отдельно как переменную, я обновил запрос, чтобы он стал более конкретным (а не просто a[href^="/venue/"] раньше), и, наконец, я добавил оператор if, чтобы убедиться, что this.href.match() возвращает ненулевую переменную. В случае сбоя match() возвращается null и if не будет выполнен.

var SearchFriendLinks = $('div.boxContainer div.content h3 a[href^="/venue/"]');

SearchFriendLinks.each(function()
{
  var venue = this.href.match(/(\d+)$/);

  if ( venue && venue[1] )
    $('<a href="/venue/' + venue[1] + '/edit">Manage venue</a>').insertAfter(this);

  // Do more useful stuff here.
});
...