Используйте .nextAll()
и :first
, чтобы получить следующий родственный брат, который соответствует, а не следующий брат , если он соответствует, например это:
$("a[href*='#/link1'").nextAll('a[href*="#"]:first').click();
JQuery не собирается помогать Вам много здесь, поскольку Вы действительно не обеспокоены обходом/управлением DOM (кроме создания тега привязки). Если все Ваши URL были в < p класс = "URL" > теги тогда, возможно.
ваниль А решение JavaScript, вероятно, что Вы хотите, и поскольку судьба имела бы его, , у этого парня должны быть Вы, покрыл .
ПРИМЕЧАНИЕ: обновленная и исправленная версия этого сценария теперь доступна в https://github.com/maranomynet/linkify (лицензия GPL/MIT)
<час>Хм... мне, это походит на идеальную задачу для jQuery.
... что-то вроде этого оторвалось вершина моего ума:
// Define: Linkify plugin
(function($){
var url1 = /(^|<|\s)(www\..+?\..+?)(\s|>|$)/g,
url2 = /(^|<|\s)(((https?|ftp):\/\/|mailto:).+?)(\s|>|$)/g,
linkifyThis = function () {
var childNodes = this.childNodes,
i = childNodes.length;
while(i--)
{
var n = childNodes[i];
if (n.nodeType == 3) {
var html = $.trim(n.nodeValue);
if (html)
{
html = html.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(url1, '$1<a href="http://$2">$2</a>$3')
.replace(url2, '$1<a href="$2">$2</a>$5');
$(n).after(html).remove();
}
}
else if (n.nodeType == 1 && !/^(a|button|textarea)$/i.test(n.tagName)) {
linkifyThis.call(n);
}
}
};
$.fn.linkify = function () {
return this.each(linkifyThis);
};
})(jQuery);
// Usage example:
jQuery('div.textbody').linkify();
Это пытается превратить все случаи следующего в ссылки:
www.example.com/path
http://www.example.com/path
mailto:me@example.com
ftp://www.server.com/path
<
... >
) Обладают:-)
f
, предположил быть глобальным.
– Martijn Pieters♦
11 March 2014 в 19:54
Если Вы хотите решение от другой перспективы..., если можно выполнить страницы через php и Очиститель HTML, это может автоотформатировать вывод и linkify любые URL.
Я предлагаю, чтобы Вы сделали это на своих статических страницах прежде, чем представить к браузеру, или Вы будете продвигать нагрузку вычисления преобразования на Ваших бедных посетителей.:) Вот то, как Вы могли бы сделать это в Ruby (читающий из stdin, пишущий в stdout):
while line = gets
puts line.gsub( /(^|[^"'])(http\S+)/, "\\1<a href='\\2'>\\2</a>" )
end
, Очевидно, Вы захотите думать о том, как сделать это столь устойчивым, как Вы требуете. Вышеупомянутое требует, чтобы все URL запустились с http и проверит для не преобразования URL, которые находятся в кавычках (т.е. который может уже быть в < href = "..." >). Это не поймает ftp://, mailto:. Это счастливо преобразует материал в местах как < script> тела, которые Вы не можете хотеть происходить.
самое удовлетворительное решение состоит в том, чтобы действительно сделать преобразование вручную с Вашим редактором, таким образом, Вы можете глазное яблоко и утверждать все замены. А хороший редактор позволит Вам сделать regexp замену со ссылками группы (иначе обратные ссылки), таким образом, это не должно быть грандиозное предприятие.