2017-10-18 21 views
0

我有一雙帶相同的類ID數量的項目,我想刪除對第一項。刪除具有重複類的元素對的第一個。類具有唯一的編號爲每對

$('.itemid').each(function() { 
 

 
    var currentclass = $.trim($(this).attr('class').replace('itemid', '')); 
 

 
    if ($('.itemid.' + currentclass).length > 1) { 
 
     $(this).remove(); 
 
    } 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="itemid 83"></div> 
 
<div class="itemid 83"></div> 
 

 
<div class="itemid 84"></div> 
 
<div class="itemid 84"></div> 
 

 
<div class="itemid 85"></div> 
 
<div class="itemid 85"></div>

這是偉大的工作與純HTML,但我不能讓它在直播現場工作。難道是因爲div包含很多內容和子div嗎?

有沒有jQuery的錯誤,我可以針對與像.addClass沒有問題的簡單功能項目。

掠過我腦海另一件事 - 是由PHP生成的項號本身(83,84,85,等等)。但我可以針對$('.itemid.83').addClass('test');沒有問題

也許有這個更好的解決辦法?

+1

只爲你的最後一點提示:PHP正在執行的服務器端,它的代碼不會與網頁發送。發送的是PHP的結果。那麼這些數字在頁面代碼中是可以正常使用的,並且可以通過javascript(在客戶端執行)訪問 – Kaddath

+0

您是否有一個能夠再現您的行爲的實例?這很難用你的代碼片段解決問題,因爲它能正常工作。 – Kaddath

+0

這裏有一個生動的例子:http://www.visit.jelgava.lv/en/ sightseeing/castleles-and-manors。 Jquery位於'

'內。目前兩個擴展之間存在問題,我需要快速修復。我想這可能是最糟糕的解決方案之一。 – Uldis

回答

1

所以,從一個事實,即其他類可以根據不同的未來問題,我們必須做一些處理,然後才能選擇好的物品。此代碼將基於2個假設:

itemid將成爲主要的類來選擇所有項目(另外一個類名可以用來代替,但所有元素都會有這樣的類,它會更容易)

itemid-{id}將是類標識與

我還讓不工作的目的,最後重複一個數字ID找到重複的(同樣,其他前綴可以使用)的每個項目,我忘了,在加上「itemid-」該號碼的開頭,但它實際上表明,代碼效果很好;)

$('.itemid').each(function() { 
 
    
 
    //building an array of all classes 
 
    var currentClasses = $(this).attr('class').split(' '); 
 
    
 
    //extracting the class we want, there could be shorter methods but it's the end of the day here :p 
 
    var i, l = currentClasses.length, stay = true, currentClass, found = false; 
 
    for(i = 0; i < l && stay; i++){ 
 
     currentClass = currentClasses[i]; 
 
     //here a regex would be better, or else all classes beginning by 'itemid-' will be selected too 
 
     if(currentClass.substring(0,7) === 'itemid-'){ 
 
      found = currentClass; 
 
      stay = false; 
 
     } 
 
    } 
 
    
 
    if (found !== false && $('.itemid.' + found).length > 1) { 
 
     $(this).remove(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="dummyClass itemid itemid-83">83</div> 
 
<div class="differentDummy itemid itemid-83">other 83</div> 
 

 
<div class="dummyClass2 itemid itemid-84">84</div> 
 
<div class="differentDummy2 itemid itemid-84">other 84</div> 
 

 
<div class="dummyClass3 itemid itemid-85">85</div> 
 
<div class="differentDummy3 itemid 85">other 85</div>

+0

謝謝這麼多,特別是解釋過程! – Uldis

+0

它會幫助我更好地理解這一點。雖然我仍然不明白爲什麼第一個代碼不工作,因爲div有很多類,但這是學習jQuery的另一個原因! – Uldis

+0

不用客氣,可能也可以通過過濾器函數來實現,但是學習基本的舊式代碼也是很好的,畢竟jQuery過濾器函數可能也會這樣做。基本上你的錯誤主要是假設只有兩個類,只刪除'itemid'和空格不足以形成一個有效的唯一類名;) – Kaddath

0

UPDATE:

糾正只刪除第一個元素...

var more_slass_array=[]; 
 

 
    $('.itemid').each(function(){ 
 
     var current_class_array=$(this).attr('class').split(' '); 
 
     for(var key in current_class_array){ 
 
     \t var current_class=current_class_array[key]; 
 
     \t if(current_class!='itemid'){ 
 
     \t \t if(more_slass_array.indexOf(current_class)==-1){ 
 
     \t \t \t more_slass_array.push(current_class); 
 
     \t \t } 
 
     \t } 
 
     } 
 
    }); 
 

 
    for(var key in more_slass_array){ 
 
    \t var current_class=more_slass_array[key]; 
 
    \t $('.'+current_class+':first').remove(); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 

 
<div class="itemid 83">itemid 83 first</div> 
 
<div class="itemid 83">itemid 83 next</div> 
 
<div class="itemid 83">itemid 83 one more</div> 
 

 
<div class="itemid 84">itemid 84 first</div> 
 
<div class="itemid 84">itemid 84 next</div> 
 

 
<div class="itemid 85">itemid 85 first</div> 
 
<div class="itemid 85">itemid 85 next</div> 
 
<div class="itemid 85">itemid 85 one more</div>

+0

代碼只是稍差,可能不會解決他的問題(更糟的是,因爲可能有其他元素數字類如'83'等。這將導致在這個測試中錯誤的計數:'if($('。'+ this_other_class).length> 1){') – Kaddath

+0

糾正僅刪除第一個元素... – mscdeveloper

相關問題