2010-06-29 18 views
7

Girdi değerlerini içeren bir yayı olan girişleri, bir düğmeyi tıklattığınızda tekrar değiştirebilecek şekilde değiştirmeye çalışıyorum. Bunun iki aşamada en kolay şekilde yapılacağını düşünüyorum - girişlerin önüne <span>[input value]</span> ekleyerek girdileri gizleyin. Tek sorun, ilk kısımda sorun yaşıyorum. 'Yapabilirim, tanımlanmamış (bu) başa ekleyin deyimi $ içeride Ancakjquery: girdileri girişlerle değiştirin

$('#container').find('input') 
    .parent() 
    .prepend('<span></span>') // this effectively creates: <span></span><input value=____> 

gibi şeyler görünüyor çalışıyorum, bu yüzden birkaç girişler olduğundan ben

.prepend('<span>'+$(this).children('input').val()+'</span>') 

yapamaz t Girdi değerini bir değişkene koymanız yeterlidir. Bunu nasıl yapardım? güncellenen soru için

+0

$ (this) prepend içinde değildir - $ ('# container') ile aynı kapsamdadır. Çok iyi çalıştı() – partkyle

cevap

24

:

$('input', context).each(function() { 
    $("<span />", { text: this.value, "class":"view" }).insertAfter(this); 
    $(this).hide(); 
}); 

You can view a more detailed demo here, with per-row edit toggling: Böyle bir şey (yorumlarla bu dayandırarak, satır başına bir düzenleme) yapabileceği

.

Bunun için .replaceWith() kullanmak isteyeceksiniz: Orijinal soru için


$('#container').find('input').each(function() { 
    $(this).replaceWith("<span>" + this.value + "</span>"); 
}); 

.each()this giriş öğesinin karşılık gelmekte olup, bir kapatma oluşturur yapabilirsiniz böylece Örneğin, this.value kullanın.

emin kodlama yapmak için bu gibi .text() kullanmak bunu biraz genişletmek, halledilir: En kolay çözüm için girişlerini değiştirmek olurdu gibi

$('#container').find('input').each(function() { 
    $(this).replaceWith($("<span />").text(this.value)); 
});​ 

You can try a demo here

+0

teşekkürler, göndermeden önce değerlendirilir. Bununla birlikte, aslında girişleri-değiştirdi. Onları bir düğmenin tıklamasıyla geri alabilmeyi isterim, dolayısıyla onları gizleme fikrimi. Karışıklık için özür dilerim, benim sorum – Mala

+1

@Nick: +1 güncellendi: Bu demolar her zaman yararlı, çok fazla çaba koymak, sadece harika bir adam koymak :) – Sarfraz

+0

Mükemmel çaba, ama OP endişelerini gidermek değil. 'replaceWith', kelimenin tam anlamıyla DOM'den öğeleri kaldırır ve OP'nin ileri geri geçiş yapması gerekir. –

1

Bana göre Düzenli olarak kenarlıklarını kaldırın (ve UI'nize bağlı olarak arka plan rengini değiştirin), bu da onları düzenli olarak bir <span> etiketi olarak gösterir.

function spanify() { 
    $('#container input') 
    .attr("readonly", "readonly") 
    .css("borderWidth", "0"); 
} 

function despanify() { 
    $('#container input') 
    .removeAttr("readonly") 
    .css("borderWidth", "auto"); 
} 

Bu uygun mu?

+0

+1 düşündüm, ama hayır, benim amacım için bu yeterli değil. – Mala

+0

@Mala Yeah, uzun mesafeydi. Normal metin kutularından başka bir şey varsa, bu kesinlikle yeterli değil. –

İlgili konular