2011-11-14 137 views
2

是否有可能得到一些創建標籤使用jQuery的jQuery + HTML標籤

例如:

$(function() { 
    $('a').click(function() { 
     var a = this.a; 
     var b = this.b; 
     var c = this.c; 
     $('.info').html("a:" + a + "b:" + b + "c:" + c); 
    }); 
}); 

<a href="#" a="txt" b="text" c="get">Info</a>

有了這個代碼,我得到:

a: undefined b: undefined c: undefined

回答

1
$(function() { 
     $('a').click(function() { 
      var t = $(this); 
      var a = t.attr('a'); 
      var b = t.attr('b'); 
      var c = t.attr('c'); 
      $('.info').html("a:" + a + "b:" + b + "c:" + c); 
     }); 
    }); 
+1

爲什麼要創建3個新的jQuery實例?使用.getAttribute – AutoSponge

+0

@AutoSponge他沒有創建3個新的實例,他正在創建一個('t')並重用它。 – Blazemonger

+3

代碼更改 – AutoSponge

0

使用.attr('a', value)作爲屬性。 this.a ... this.c未定義。

0

this的範圍不只是認識的屬性,直接把它們變成屬性,必須「找」出來的,使用jQuery的attr(name)方法,例如:

$(function() { 
    $('a').click(function() { 
    var a = $(this).attr('a'); 
    var b = $(this).attr('b'); 
    var c = $(this).attr('c'); 
    $('.info').html("a:" + a + "b:" + b + "c:" + c); 
    }); 
}); 
0
$(function() { 
    $('a').click(function() { 
     var a = $(this).attr("a"); 
     var b = $(this).attr("b"); 
     var c = $(this).attr("c"); 
     $('.info').html("a:" + a + "b:" + b + "c:" + c); 
    }); 
}); 

演示http://jsfiddle.net/S4svg/

0

變化:

var a = this.a; 
    var b = this.b; 
    var c = this.c; 

要:

var $this = $(this), 
     a = $this.attr('a'), 
     b = $this.attr('b'), 
     c = $this.attr('c'); 

通知我緩存$(this)選擇,所以我們只需要處理一次選擇而DOM元素的開銷。我還使用逗號將變量聲明鏈接在一起,而不是反覆使用var關鍵字。

此外它是一個好主意,使用data-attributes,以確保您使用的是獨特的名稱。因此,而不是:

<a href="#" a="txt" b="text" c="get">Info</a> 

嘗試:

<a href="#" data-a="txt" data-b="text" data-c="get">Info</a> 
4

您應該使用getAttribute()此:

var a = this.getAttribute("a"); 
var b = this.getAttribute("b"); 
var c = this.getAttribute("c"); 

例子:http://jsfiddle.net/xhBgr/

編輯

我不知道爲什麼每個人都告訴你使用attr()但那是非常相對昂貴相比的getAttribute()(而不是包裝this在一個jQuery每次對象),它也完全一樣在這種情況下作爲getAttribute的東西。所以儘管大多數人說過你應該使用getAttribute()。

這裏有一個證明的基準:http://jsperf.com/attrvsget 我在Chrome中使用getAttribute方法獲得了2800%的性能提升。

+0

我的印象是,跨瀏覽器兼容性是getAttribute/hasAttribute(MDN指向getattr前使用hasattr)的問題。我錯了嗎? –

+1

@ChrisBiscardi在這種情況下沒有問題。唯一的區別是在某些瀏覽器中該屬性不存在時返回null,而在其他瀏覽器中則返回一個空字符串。同樣在IE的一些老版本中,getAttribute對'style'和'onclick'屬性的行爲略有不同。 – Paulpro