2011-05-04 16 views
10

Olası Yinelenen: için tercih edilen bir yöntemdir jQuery yeni .prop() yöntemi göz önüne alındığında
.prop() vs .attr()JQuery elemanları oluşturma - .prop vs başka .attr()() soru

,'u belirli alanlarla yeni bir öğe oluşturmak Bir link:

  1. $('<a>').prop('href', '...');
  2. $('<a>').attr('href', '...');
  3. $('<a href="...">');

Hep 2. kullanma eğiliminde ettik ama olsun bir yeni eleman DOM olmamalı konduğunu' belirsiz Şimdi bunun yerine # 1 kullanın.

+1

DUPLICATE DEĞİL. Bağlantılı soru, öncelikle özellik ve özellik ** getters ** ile ilgilidir. Bu soru sadece ** setters ** hakkında ve daha spesifik olarak yeni oluşturulan bir DOM öğesine uygulanmalarıyla ilgilidir. Bu sorunun cevabı sadece link verilen sayfada ele alınmaktadır. –

+0

@ BobStein-VisiBone Eğer yeterince temsilcisi varsa, yeniden açmak için oy olabilir, ama ben aradım cevabı aldım (aşağıda) – Alnitak

+0

Teşekkürler @Alnitak Benim de cevabım var. Sadece yeniden açmak için yeterli temsilcisi yerine posterity için bir ipucu bırakarak (3K düşünüyorum). –

cevap

13

Bu durumda attr() ile giderdim. Yeni bir <a> öğesi oluşturuyor ve hrefHTML özniteliğini olarak ayarlıyorsunuz, bu nedenle bunu vurgulamak mantıklı olacaktır. Ancak, href özniteliği href DOM özelliğiyle doğrudan eşleştiğinden prop() kullanarak aynı sonucu elde edecekti.

en attr() ve prop() arasındaki farklılıklara daha uygun başka bir örneği ele alalım: yerine kendi href ait <a> elemanın class nitelik vermek istediğiniz varsayalım. sorunuzu örnek kod haline gelir:

  1. $('<a>').prop('className', '...');
  2. $('<a>').attr('class', '...');
  3. $('<a class="...">');

IMHO, (2) ve (3) daha Kişinin niyeti net hale (1). class adında bir DOM özelliği olamaz, çünkü bu belirteci ana bilgisayar dilinde ayrılmış bir sözcük olabilir, en iyi uygulama ayrıntıdır. class HTML özniteliği, genellikle bu bağlamda düşündüğümüz şeydir. Tabi ki, tam tersinin olduğu durumlar da vardır, örn. checked veya disabled gibi "boolean" HTML öznitelikleriyle çalışırken. Bu durumda, daha az iyi tanımlanmış HTML niteliğini oluşturmak yerine, güçlü yazılan DOM özelliğini ayarlamak daha sağlam olacaktır.

+2

+1 _why_ yerine sadece bir "açıklama yapmak için" yerine – Chad

7

Genellikle bir etiket şöyle yaratacak:

$('<a>', {href: '...'}); 

başında elemana kadar çok özelliklerini ekler.(attributes evet değil özellikleri)

Yani girişler gibi öğeler için aynı şeyi yapabilir:

 $('<input>',{ 
       name: 'some_name', 
       id: 'some_id', 
       value: item_value, 
       readonly: 'true', 
       style: 'background: #eee;', 
       size: 15 
      }); 

Ya gerçek birer bölümdür: http://jsfiddle.net/maniator/mbjgd/

: Burada
 $('<div>',{ 
       id: 'some_id', 
       text: 'this will be inside the div' 
      }); 

bir keman örnektir

EDIT
Yorumdan ow:

Bunun nedeni, öğeyi oluşturduğunuzda, öznitelikleri belirleyerek oluşturuyor olmanızdır, daha sonra bu öznitelikler javascript gibi bir şey tarafından değiştirildiklerinde anlamsız hale gelir, bu nedenle, o noktada kullanmak zorundasınız. Nesnenin özellikleri, aradığınız gerçek çözümü elde etmenizi sağlar.

+0

cevabını - bu sözdiziminin farkında değildim. { '$ ('' adı: – Alnitak

+0

i örneğin girişler gibi birçok nesneyi tanımlamak için her zaman kullanmak item.name, id: değerini item.id: item_value, salt okunur: 'true', stili: 'background: #eee;', boyut: 15 }); ' – Neal

+0

@Alnitak, daha iyi göstermek için yayın tarafından düzenlenmiş. Ben de bir çetele de – Neal