Извлечь onclick location.href из объекта jquery в виде строки
Я пытаюсь угнать button
элемент, чтобы я мог открыть его ссылку в новом окне. Я добавил новый атрибут, элементы которого нужно открыть в новом окне с именем data-ext-link="true"
, В некоторых случаях button
элемент имеет onclick
который содержит location.href
что мне нужно отправить пользователя. Как я могу взять это location.href
используя jquery, чтобы я мог поставить его на window.open
в моей функции?
Приведенная ниже функция отлично работает для якорных элементов, но она в моем is('button')
if
заявление, где это становится волосатым и не работает, потому что attr()
возвращает объект, а не строку. Возвращаемый объект выглядит следующим образом:
Код моей кнопки:
<button data-ext-link="true" onclick="location.href='http://website/url_i_want'" class="btn2">Open it up</button>
$.attr ('onclick') Ответ:
function onclick(event) {
location.href = "http://website.com/url_i_want";
}
Моя функция:
function extLinks() {
var extLinks = $('a[data-ext-link="true"], button[data-ext-link="true"]');
$.each(extLinks, function(){
if($(this).is('button')){
var link = $(this).attr('onclick'); // Here it needs to be a string.
link = link.match(/location.href='(.*)'/); //Won't work because it's an object.
link = link[1];
} else {
var link = $(this).attr('href');
}
$(this).unbind('click.extLink').bind('click.extLink',function(e){
e.preventDefault();
window.open(link);
});
});
}
ОБНОВИТЬ:
Я нашел следующий связанный вопрос, который предлагает использовать $.live
который устарел, я бы использовал $.delagate()
вместо этого, но это не полностью решает проблему, где я должен сказать этой кнопке открыться в новом окне, используя его location.href
значение внутри onclick
как цель.
РЕШЕНИЕ:
function extLinks() {
var extLinks = $('a[data-ext-link="true"], button[data-ext-link="true"]');
$.each(extLinks, function(){
if($(this).is('button')){
var link = this.onclick.toString().match(/location\.href\s*=\s*['"]([^'"]*)['"]/)[1];
} else {
var link = $(this).attr('href');
}
$(this).unbind('click.extLink').bind('click.extLink',function(e){
e.preventDefault();
window.open(link);
});
});
}
1 ответ
Попробуйте преобразовать функцию в строку:
var link = $(this).attr('onclick').toString();
Примечание - я не знаю, будет ли это работать во всех браузерах. У меня работает в Firefox и IE7, хотя.
Кроме того, вам может потребоваться пересмотреть свое регулярное выражение - оно не будет работать для приведенного вами примера. Попробуй это:
/location\.href\s*=\s*['"]([^'"]*)['"]/
Я подтвердил, что это решение работает для меня. Вот пример страницы: http://nylen.tv/test-onclick.html