2009-10-06 55 views
0

好的,我碰到了一堵磚牆。我有一個項目,我需要將表中列出的項目(照片)轉換爲UL進一步的jQuery操作(理想情況下使用jQuery Cycle - http://www.malsup.com/jquery/cycle/)。我找到了這個堆棧溢出帖子(How to transform HTML table to list with JQuery?),但是這個代碼似乎有點用處和特定於OP的使用。我也很好奇這是否需要在頁面加載的某個點執行(DOM準備就緒,Post DOM準備就緒等)。使用jQuery處理和轉換表格項目

不幸的是,我沒有太多格式化輸出的選項,因爲它是由第三方模塊生成的。目前,輸出格式,像這樣(簡體空間和清晰度編號和網址):

<!-- First Item, I can set this to format however I like --> 


<a href="16.jpg" rel="lightbox2" title=""><img src="16.jpg" class="FirstPhoto" alt="" width="320" height="240" /></a> 

<!-- Subsequent Items are put into a table, as the developer has explained - rendered as a Datalist --> 
<table id="CMS-ASSIGNED-UNIQUEID" cellspacing="0" cellpadding="0" border="0" style="width:100%;border-collapse:collapse;"> 
     <tr> 
      <td align="center"> 
      <a href="17.jpg" rel="lightbox2" title=""><img src="17.jpg" class="ItemPhoto" width="125" height="94" alt=""></a> 
      </td> 
      <td align="center"> 
      <a href="18.jpg" rel="lightbox2" title=""><img src="18.jpg" class="ItemPhoto" width="125" height="94" alt=""></a> 
      </td> 
     </tr> 
     <!-- Continue for n Rows --> 
     </tr> 
    </table> 

理想情況下,我想獲得它這樣的出口(注意,第一個項目也是在那裏,我可以解決此,如果它超出了什麼是可能的)範圍:

<div class="slideshow"> 
    <img src="16.jpg" width="125" height="94" /> 
    <img src="17.jpg" width="125" height="94" /> 
    <img src="18.jpg" width="125" height="94" /> 
</div> 

回答

1

這個jQuery的點點會抓住所有的img元素,並將它們添加到幻燈片元素容器

$(function() { 
    $('<div class="slideshow"></div>') 
     .appendTo('body') 
     .append(
      $('a[rel=lightbox2] > img').clone() 
      .removeClass() 
      .attr({ height: 94, width: 125 }) 
     ); 
}); 

此時,你應該能夠運行您的幻燈片。

+0

假設其他'a [rel = lightbox2]> img'可以在同一頁面上存在是合理的,在這種情況下,'$('#CMS-ASSIGNED-UNIQUEID a [rel = lightbox2]> img')'將會更適合避免移動不需要的圖像。 – 2009-10-06 17:07:32

+0

這是一個很好的觀點。使用該選擇器的缺點是不包含第一個img標籤(表格外的標籤)。 OP提到能夠解決這個問題。 – dcharles 2009-10-06 17:24:41

+0

事實上,我相信我可以解決這個問題,但是如果它可以包括,那就更好了。在閱讀了迄今爲止的幾個答案之後,我應該能夠完成這項工作。我很感謝大家對此的幫助! – SilentBobSC 2009-10-06 17:52:03

0

如果我沒有記錯,這似乎是的簡單情況:

$(document).ready(function() 
{ 
    var container = $(document.createElement('div')) 
     .addClass('slideshow'); 
    $('#CMS-ASSIGNED-UNIQUEID img.ItemPhoto') 
     .removeClass('ItemPhoto') 
     .appendTo(container); 
}); 

調用container.html()會給你想要的輸出,或者你可以直接將元素包含在文檔的DOM中。方法ready也將確保該表是可用的(除非它稍後動態加載)。

0

這裏有一些東西讓你去。它可能需要修改您的特定需求,因爲您的HTML環境缺失。

var images = $('img.FirstPhoto, img.ItemPhoto'); 
var newImages = []; 
newImages[newImages.length] = '<div class="slideshow">'; 
images.each(function() { 
    var img = $(this); 
    newImages[newImages.length] = '<img src="'; 
    newImages[newImages.length] = img.attr('src'); 
    newImages[newImages.length] = '" width="'; 
    newImages[newImages.length] = img.attr('width'); 
    newImages[newImages.length] = '" height="'; 
    newImages[newImages.length] = img.attr('height'); 
    newImages[newImages.length] = '" />'; 
}); 
newImages[newImages.lenght] = '</div>'; 

var newHtml = newImages.join(''); 
var newElement = $(newHtml); 

var table = $('table#CMS-ASSIGNED-UNIQUEID'); 
table.after(newElement); 
table.remove(); 

$('img.FirstPhoto').closest('a').remove(); 
+0

謝謝,我對缺少的上下文表示歉意。由於它全部位於CMS內部,爲了可讀性和清晰度,我嘗試去除所有「無關」代碼。這是一個很好的大塊,應該讓我走上正軌。 – SilentBobSC 2009-10-06 17:48:31