Определите, следует ли какой-либо текст за тегом привязки (или селектор ': last-child', который считает текстовые узлы) - PullRequest
2 голосов
/ 09 июня 2011

Когда пользователь публикует ссылку на моем форуме, я собираюсь заменить ее предварительным просмотром этого связанного контента (что-то вроде новостной ленты Facebook).Однако я хочу заменить ссылку только в том случае, если она появляется в конце абзаца (или если это единственный элемент в абзаце).

Например:

I do хотите заменить ссылку в этом случае:

<p>Check out this cool website: 
<a href="http://google.com">http://google.com</a></p>

но я не хочу заменить ее в этом случае:

<p>Check out this cool website:
<a href="http://google.com">http://google.com</a> – isn't it great?</p>

КомуДля этого мне нужно провести различие между ссылками с текстом после них и ссылками без них.Моей первой мыслью было проверить $the_link_in_question.is(":last-child"), но потом я понял, что :last-child игнорирует текстовые узлы.

Полагаю, я мог бы сделать что-то вроде:

$the_link_in_question.parent().contents().last()[0] == $the_link_in_question[0]

Но такой подход заставляет менявырвет мне в ротМысли?

1 Ответ

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

Вы можете просто проверить .html(), чтобы увидеть, заканчивается ли оно </a>:

if (/<\/a>$/i.test($p.html())) {
    var previewMe = $p.children().last();
}

Вам понадобится более сложное регулярное выражение, если возможно, что ваши якоря могут быть обернуты в другие элементы, например <strong> (ваш первоначальный подход не мог справиться и с этими случаями):

<p>content <strong><a href="...">link</a></strong></p>

В этом случае вы можете использовать это регулярное выражение:

/<\/a>(<\/.+?>)*$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...