2010-06-18 5 views
7

Я пытаюсь получить значение href с привязки. Код выглядит следующим образомИзвлечение href из html с помощью jQuery

var html = "<a href=' http://path/to/file.pdf'>File</a&gt ;";
alert(jQuery("a",html).attr("href"));

выход только я получаю это «не определено». Я хочу получить «http://path/to/file.pdf».

Любая помощь очень ценится.

ответ

16

Try:

jQuery(html).attr('href'); 

Или если <a> тег глубже в HTML, чем ваш пример:

jQuery(html).find('a').attr('href'); 

jQuery() функция преобразует HTML-строки в объекты DOM и возвращает объект JQuery содержащие их для вас.

+0

Nice и лаконичный. Также хорошая работа для объяснения причин работы '$ (html)'. –

+1

+1. Просто примечание к OP, я бы избегал использования «html» в качестве имени переменной, поскольку jquery имеет функцию с именем .html(), которая используется довольно часто. – womp

+0

В качестве примечания для других, которые ищут это, вы также можете использовать jQuery (html) .get (0) .href' и использовать vanilla javascript. –

1

Ваш код должен выглядеть, чтобы сделать это работает, как вы хотите:

var html = "<a href='http://path/to/file.pdf'>File</a>"; 
alert($(html).attr("href")) 
3

Чтобы объяснить, почему ваш метод не работает - когда вы делаете jQuery("a",html), вы ищете элементы внутри контекста элемент, хранящийся в html.

Единственное, что в данный момент находится внутри, это текст файла. Если ваша строка была завернута в div, например, она будет работать. <div><a href='...'>File</a></div>


Я предполагаю, что у вас есть другие причины для создания объекта JQuery. Если нет, и вам не нужны дополнительные накладные расходы, вы можете использовать регулярное выражение.

Пример:http://jsfiddle.net/e3Gyc/

var html = "<a href='http://path/to/file.pdf'>File</a>"; 

var result = html.match(/href='([^']+)'/)[1]; 

В противном случае ответы, которые gnarf и Dzida дали отличные.

+0

Ooo, с одной стороны, объяснение для 'jQuery (« a », html)' не работает отлично ... С другой стороны вы * gasp * выступаете за синтаксический анализ HTML с RegExp ... Risky Move - +1 :) – gnarf

+0

@gnarf - Спасибо за +. : o) Нет, не защищаю. Я слишком апатичен, чтобы быть сторонником. o) Просто указывая на то, что вам необязательно будет создавать объект jQuery, если выборка 'href' является единственной целью. Скорее всего, случай. По общему признанию, полезность этого решения является узкой и чреватой опасностью. +1 backatcha. – user113716

Смежные вопросы