jquery не добавляет класс в указанный массив - PullRequest
0 голосов
/ 26 февраля 2012

У меня есть HTML-код ниже

<span class="post-labels">
    <a href="http://myblog.blogspot.com/search/label/jQuery%20Downloads">jQuery Donwloads</a>
    <a href="http://myblog.blogspot.com/search/label/jQuery">jQuery</a>
    <a href="http://myblog.blogspot.com/search/label/mootools">mootools</a>
    <a href="http://myblog.blogspot.com/search/label/css">css</a>
    <a href="http://myblog.blogspot.com/search/label/blogger">blogger</a>
    <a href="http://myblog.blogspot.com/search/label/wordpress">wordpress</a>
</span>​

jquery ниже добавляет класс к <a> элементам ПРИНЯТЬ для URL http://myblog.blogspot.com/search/label/jQuery%20Downloads http://jsfiddle.net/qbrN8/10/

$(".post-labels a").each(function(){
var domain = "http://myblog.blogspot.com/search/label/";
var dontadd = "jQuery Downloads";
var encode = encodeURI(dontadd);    
var url = domain + encode; 
var posta = $(this).attr("href");
if(posta!=url){
$(this).addClass("addedclass");
}        

}); * * 1 010


Я пытаюсь создать массив для исключения нескольких указанных URL с помощью jquery ниже, НО это не работает http://jsfiddle.net/qbrN8/11/ .... Я никогда не работал с массивами, поэтому я не знаю, как полностью выполнить его. у меня есть поиск, но я продолжаю получать результат, такой как var myarray[0] var myarray[1], где я бы предпочел иметь массив вроде var myarray = [];

$(".post-labels a").each(function(){
    var domain = "http://myblog.blogspot.com/search/label/";
    var dontadd = [];
    dontadd.push("jQuery Downloads", "css", "wordpress");
    var encode = encodeURI(dontadd);    
    var url = domain + encode; 
    var posta = $(this).attr("href");
    if(posta!=dontadd){
    $(this).addClass("addedclass");
    }        
});

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Во-первых: не объявляйте ваши "глобальные" переменные в каждом из них ... это заставляет вас объявлять их для каждого элемента.Это ДЕЙСТВИТЕЛЬНО не оптимизировано

var dontadd = ["jQuery Downloads", "css", "wordpress"], domain = "http://myblog.blogspot.com/search/label/"; $(".post-labels a").each( ...

Второе: вы должны проверить, находится ли метка в dontadd, а не если метка есть dontadd => if (dontadd.indexOf(posta) !== -1) Работа с массивом означает, чтоколлекция элементов, а не только один.Таким образом, вы должны проверить, находится ли то, что вы ищете, в.indexOf возвращает вам индекс (от 0 до длины-1) элемента, -1, если он не существует.

В-третьих: вы никогда не работали с массивом и используете jQuery?Вы делаете это неправильно.Вы должны вернуться к 0, прочитать и узнать о основах Javascript , узнать, как создать библиотеку и т. Д. ... Когда вы сможете сделать вещи, подобные той, которую вы используете, вы будетеуметь научиться использовать jQuery.

1 голос
/ 26 февраля 2012

!= не работает, если вы хотите проверить, содержит ли массив строку. Вы можете использовать indexOf: http://jsfiddle.net/qbrN8/13/.

$(".post-labels a").each(function(){
    var domain = "http://myblog.blogspot.com/search/label/";

    var dontadd = ["jQuery Downloads", "css", "wordpress"].map(function(v) {
        return domain + encodeURI(v);
    });
    // `dontadd` is an array of encoded, full URLs

    var posta = $(this).attr("href");

    // `!~` with `indexOf` can be used for "does not contain"
    if(!~dontadd.indexOf(posta)){
        $(this).addClass("addedclass");
    }        
});
...