2015-05-02 4 views
1

Я создал небольшой скрипт для «похожих» сообщений на определенном форуме, который я часто посещаю, скрипт работает по назначению, нравится каждый пост в определенном потоке.jQuery - Элемент массива как селектор

Теперь я хочу, чтобы улучшить его, сделав его как посты некоторых пользователей, а не каждого пользователя, до сих пор, мне удалось заставить его работать для конкретного пользователя:

$(function(){ 

var TargetLink = $("[data-author='SpecificUser'] span:contains('Like')"); 

if (TargetLink.length) 
    TargetLink.each (function() { 

     var clickEvent = document.createEvent ("HTMLEvents"); 
     clickEvent.initEvent ("click", true, true); 
     this.dispatchEvent (clickEvent); 
    }); 

}); 

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

Моя идея состоит из массива с именами пользователей, значения атрибута «data-autor» присваиваются переменной, а затем петляют функцию симпозиума, но я не могу понять, как это сделать.

HTML-дерево выглядит примерно так:

<li id="post-####" class="message " data-author="User 1"> 
<div> 
    <div> 
     . 
     . 
     . 
     <span class="LikeLabel">Like</span> 
. 
. 
. 
<li id="post-####" class="message " data-author="User 2"> 
<div> 
    <div> 
     . 
     . 
     . 
     <span class="LikeLabel">Like</span> 

Я хочу сделать что-то вроде этого:

var userNames = ["User1", "User 2", "User 3",...,"User N"]; 

, а затем использовать элементы массива в качестве значения атрибута [данных -autor = 'userNames'] в моем скрипте, поэтому мне нравится только сообщение из определенного списка пользователей, но я понятия не имею, как, я уже прочитал несколько вопросов, но никто, кажется, не помогает мне с моей конкретной проблемой, все учебники I найти очень простые и не имеют дело с использованием элементов из массива в качестве атрибута ute.

+1

См. Http://stackoverflow.com/help/someone-answers – guest271314

ответ

0

Ссылка эта по следующим каналам.

Я рекомендую этот метод.

Query.each:

jQuery.each(substr, function(index, item) { 
    // do something with `item` (or `this` is also `item` if you like) 
}); 

STACKOVERFLOW

+0

Очень интересно читать, спасибо за ссылку. –

1

Попробуйте

// do stuff at `click` event 
 
$("span").on("click", function(e) { 
 
    // log `user` , `html` of `span` element 
 
    console.log($(e.target).parent().data("author"), e.target.innerHTML); 
 
}); 
 
// array of user names; note "User 6" does not exist at `html` 
 
var userNames = ["User 1", "User 2", "User 3" 
 
       , "User 4", "User 5", "User 6"]; 
 
// loop through items within `userNames` array 
 
var links = function links(arr) { 
 
    // return a 
 
    return $(arr).map(function(i, user) { 
 
    // create jQuery object 
 
    var TargetLink = $("[data-author='" + user + "'] span:contains('Like')"); 
 
    // does element, collection exist ? 
 
    if (TargetLink.is("*")) { 
 
     // if element , collection exists, loop through collection 
 
     TargetLink.each(function() { 
 
     // do stuff 
 
     var clickEvent = document.createEvent("HTMLEvents"); 
 
     clickEvent.initEvent("click", true, true); 
 
     this.dispatchEvent(clickEvent); 
 
     }) 
 
    }; 
 
    // return `TargetLink` element, collection as jQuery object, 
 
    // if user does not exist , will not be included in results 
 
    return TargetLink[0] 
 
    }) 
 
}; 
 
console.log(links(userNames));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"> 
 
</script> 
 
<div data-author="User 1"><span>Like</span> 
 
</div> 
 
<div data-author="User 2"><span>Like</span> 
 
</div> 
 
<div data-author="User 3"><span>Like</span> 
 
</div> 
 
<div data-author="User 4"><span>Like</span> 
 
</div> 
 
<div data-author="User 5"><span>Like</span> 
 
</div>

+0

Это прекрасно работает, спасибо большое. –

0

$() принимает массив строк в качестве селектора, затем с помощью массива пользователя s, вы можете создать массив селекторов.

var userNames = ["User1", "User 2", "User 3",...,"User N"]; 
var selectors = $.map(userNames, function(item){ // this creates a new array 

    // replace your selector placeholder with the username 
    var selector = "[data-author='%s'] span:contains('Like')".replace('%s', item); 
    return selector; 
}); 

users = $(selectors); // Create your jquery object 

// Here comes your code... 
// Removed the if cause "each" will work even if length is 0 
users.each (function () { // for each matched element 
    // Simplified your code 
    $(this).click(); // "this" is the "like" 
}); 
Смежные вопросы