2009-11-19 58 views
17

這是我的問題的簡化版本。jQuery:用A錨點標記包裝圖像標記的最簡單方法

我有兩個按鈕和一個圖像。圖像的代碼是這樣的

<img class="onoff" src="image.jpg"> 

當我按下按鈕,一個我想要的形象被包裝在一個標籤,就像

<a href="link.html"> 
<img class="onoff" src="image.jpg"> 
</a> 

當我按下另一個按鈕,在A標籤應該被刪除。

用jQuery做這件事最簡單的方法是什麼?

回答

18

你已經有很多答案,但(至少在我開始寫作)他們都將正常工作。

他們沒有考慮到,你應該包裹<img>多個<a>標籤。此外,不要如果它未被包裝,嘗試解開它!你會毀掉你的DOM。

此代碼簡單做了驗證包裝或展開前:

$(function(){ 
    var wrapped = false; 
    var original = $(".onoff"); 

    $("#button1").click(function(){ 
     if (!wrapped) { 
      wrapped = true; 
      $(".onoff").wrap("<a href=\"link.html\"></a>"); 
     } 
    }); 

    $("#button2").click(function(){ 
     if (wrapped) { 
      wrapped = false; 
      $(".onoff").parent().replaceWith(original); 
     } 
    }); 
}); 

祝你好運!

0

你可以使用jQuery wrap()函數。

的代碼是:使用jQuery的click圖像上綁定本身會比錨包裝形象更好

$("img.onoff").wrap(
    $("<a/>").attr("href", "link.html")); 

但也許:

<input type="button" id="button1" value="Wrap" /> 
    <input type="button" id="button2" value="Unwrap" /> 
    <img class="onoff" src="image.jpg" alt="" /> 

    $(function() { 
     //wrap 
     $('#button1').click(function() { 
      $('.onoff').wrap('<a href="link.html"></a>'); 
      //if you want to make sure multiple clicks won't add new <a> around it 
      //you could unbind this event like that: 
      //$(this).unbind("click") 
     }); 
     //unwrap 
     $('#button2').click(function() { 
      $('.onoff').parent().each(function() { $(this.childNodes).insertBefore(this); }).remove(); 
      //$(this).unbind("click") 
     }); 
    }); 
+0

多次點擊button1 ==>多個a的img! –

+0

公平點,但我沒有看到要求說這是不允許的項目。也許他確實想要添加多個鏈接?但是,我編輯了我的代碼,並添加了單擊時解除綁定事件的選項。 – rochal

+0

有一個新的潛在問題:取消綁定並取消綁定,然後點擊'button1',然後點擊'button2' ==>不能再次插入''標籤。 –

7

包裹元素

$(".onoff").wrap("<a href='link.html'></a>"); 

而解開

$(".onoff").parent().replaceWith($(".onoff")); 
+0

很酷的使用replaceWith,Simon。謝謝! – btelles