Я пытаюсь захватить элемент 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);
});
});
}
UPDATE:
Я нашел следующий связанный вопрос, который предлагает использовать $.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);
});
});
}