Jquery найти и скрыть div с дублирующимся идентификатором или HTML - PullRequest
3 голосов
/ 16 сентября 2011

У меня есть несколько div с одним и тем же классом, поэтому сначала я хочу найти, у кого есть повторяющееся имя класса, а затем я хочу скрыть все div, кроме первого

<div class="jquery"> </div> 
 <div class="jquery"></div>

Нужна помощь, пожалуйста

Спасибо

Ответы [ 4 ]

5 голосов
/ 16 сентября 2011

срез jQuery первый элемент:

$('.jquery').slice(1).hide()

пример

РЕДАКТИРОВАТЬ: найти дубликаты

Новый пример

var duplicated = {},
    class;
$('div').each(function() {
    class = $(this).attr('class');
    duplicated[class] = (duplicated[class] | 0) + 1
})

for (var key in duplicated) {
    if (duplicated.hasOwnProperty(key) && duplicated[key] > 1) {
        $('div.' + key).slice(1).hide()
    }
}
2 голосов
/ 16 сентября 2011

Это не поможет вам определить, какие имена классов дублируются, но это скроет дубликаты.

$('.duplicated_class_name').slice(1).hide()

[edit] добавил реальное решение и комментарий ниже:

(function($){

var
  classes = {},
  dupes = {};

$('div')
  .each(function(index, elem){
    $.each(
      elem.className.split(/\s+/),
      function(index, name) {
        if (name) {
          classes[name] = (classes[name] || 0) + 1;
          if (classes[name] > 1) {
            dupes[name] = classes[name];
          }
        }
      }
    );
  });

$.each(
  dupes,
  function(name) {
    $('.' + name)
      .slice(1)
        .hide();
  }
);

})(jQuery);

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

Вы почти наверняка захотите отфильтровать, какие классы должны быть скрыты, либо предоставив предварительно определенный белый список, либо, по крайней мере, соответствующую функциюкакой-то король (как регулярное выражение).Удачи!

2 голосов
/ 16 сентября 2011

у вас не должно быть несколько id с, для класса вы можете сделать

$("div.jquery:not(:first)").hide();

или

$("div.jquery:gt(0)").hide();

вот скрипка http://jsfiddle.net/674nF/

чтобы узнать, существует ли более одного div с одним и тем же именем класса, вы можете сделать

if($(".jquery").length>1){
// more than one divs have class jquery
}

, чтобы манипулировать каждым div, имеющим класс jquery

$(".jquery").each(function(index,j){
$(this).attr("rel","div number"+index);  //this will refer to each respective div having class jquery, for each iteration
});
0 голосов
/ 16 сентября 2011
$('.class_name')

Передаст вам объект jQuery, содержащий все элементы DOM этого класса.См. jQuery в документации.

$('.class_name').length

Свойство length даст вам количество элементов этого класса.* Возьмет один элемент сразу из элементов одного класса, и вы можете работать с каждым из них одновременно.Смотрите каждый здесь.Каждый из этих предметов имеет один и тот же класс.

$('.class_name').slice(1).hide()

Скрывает все элементы, кроме первого, поскольку он удаляется с помощью slice .

...