2016-03-18 3 views
2

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

Скажем, у меня есть этот код:

var vara="bing.com"; 
var varb="google.com"; 
jQuery('a[href^="http://'+vara+'"],a[href^="https://'+vara+'"]').click(function() {alert('y'); }); 
jQuery('a[href^="http://'+varb+'"],a[href^="https://'+varb+'"]').click(function() {alert('y'); }); 

И что мне нужно, чтобы достичь здесь, чтобы использовать один вызов, который устанавливает функцию .click для каждого переменного массива:

var varall=["bing.com","google.com"]; 
jQuery('a[href^="http://'+varall+'"],a[href^="https://'+varall+'"]').click(function() {alert('y'); }); 

Но это не работает. Как сделать переменную «varall» взять каждый элемент из массива, поэтому второй скрипт будет работать как первый?

ответ

2

ответ Эван Trimboli в порядке, но ... В этом случае этот селектор sintaxis не очень хорошо. Поскольку, как я знаю, когда jQuery добавит событие в <a>, он разделит строку и зациклирует каждый элемент (снова). Таким образом, мы получаем двойную петлю.

Я думаю, что лучший вариант, чтобы сделать что-то вроде этого:

var varall=["bing.com","google.com"]; 

varall.forEach(function(item, i, arr) { 
    $(document).on('click', 'a[href^="http://' + item + '"], a[href^="https://' + item + '"]', function() { 
     alert('y'); 
    }); 
}); 

https://jsfiddle.net/Lfjy2Lxu/

+0

Любой вид «выигрыша» от этого будет незначительным до такой степени, что это не имеет значения. –

0

Похоже, что вы хотите сделать это

var varall=["bing.com","google.com"]; 

$.each(varall, function(index, value){ 
    jQuery('a[href^="http://'+value+'"],a[href^="https://'+value+'"]').click(function() {alert('y'); }); 
}); 
+0

Это добавило бы каждый селектор в два раза. –

+1

@EvanTrimboli 'http' **! = **' https' – Popnoodles

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