2012-11-28 13 views
6

nasıl bir metin düzenleyiciye tarayıcıdan sürüklenen veya sürüklenen eleman metin gizli zaman editörü yapıştırılabilir olacağı bir html öğesi oluşturabilirim?Tarayıcıdan sürüklenebilen gizli metin?

ilk düşüncem bağlantı etiketi üzerinde href niteliğini kullanmaktı:

<a href="hidden message text here">Drag me into a text editor!</a> 

Bu krom büyük çalışır, ancak firefox ve safari kopyalanan mesaj kullanılmaz hale getiriyor href değeri boşluk kaldırmak.

Herhangi bir fikrin var mı?

+1

URI href koymadan önce dize kodlama denemek mü? –

+1

Sürükleyerek, ancak JS ile kopyalayıp yapıştırarak nasıl yapılacağından emin değilsiniz. Bu jsFiddle göz atın: http://jsfiddle.net/jRXMf/ Belki bu yardımcı olacak? – ReLeaf

+0

@andrew URI kodlaması, boşlukları% 20 ile değiştirmeyecek şekilde değiştirir. http://www.html5rocks.com/en/tutorials/dnd/basics/#toc-dragging-events – Zaqx

cevap

3

yerine metin/bağlantılar/resimler sürüklenirken için tarayıcının varsayılan davranışını etkilemeye yerine, dragstart olay keyfi bir şeye veri ayarlamak istiyorum.

Örneğin

, gizli #content gelen metni kullanın: dataTransfer yöntemini desteklemeyen 10'un altındaki IE sürümleri için JSFiddle

+0

Müthiş çözüm: – Zaqx

+0

IE8, IE9 iyi çalışır bunun için bir çare ile geldi ve burada kodunuzu uzanan aşağıda başka bir yanıt olarak ekledi. – Zaqx

+0

Daha eksiksiz bir cevabı paylaştığınız için teşekkür ederiz! – Anson

1

çalışıyor İşte

$('[draggable]').on('dragstart', function(e) { 
    var content = $(this).find('#content').text(); // Can be anything you want! 
    e.originalEvent.dataTransfer.setData('text/plain', content); 
    $(this).addClass('dragging'); 
}); 

, ben keşfettim Bu işi yapmak için başka bir şekilde hacky yolu.

Temel olarak css ile görünmez metin daha sonra vurgulu arka planda seçmek için js kullanmaya dikkat edin.

HTML

<div id="drag_area" draggable="true"> 
    <div id="text"> 
     hidden text 
    </div> 
</div>​ 

CSS

#text { filter:alpha(opacity=0); opacity:0; 
     overflow:hidden; z-index:100000; width:180px; height:50px } 

JS

function selectText(elementID) { 
     var text = document.getElementById(elementID); 
     if ($.browser.msie) { 
      var range = document.body.createTextRange(); 
      range.moveToElementText(text); 
      range.select();   
     } else if ($.browser.mozilla || $.browser.opera) { 
      var selection = window.getSelection(); 
      var range = document.createRange(); 
      range.selectNodeContents(text); 
      selection.removeAllRanges(); 
      selection.addRange(range); 
     } else { 
      var selection = window.getSelection(); 
      selection.setBaseAndExtent(text, 0, text, 1); 
     } 
    } 
    $('#drag_area').hover(function(){ 
     selectText('text'); 
    }); 
İşte

o Anson'ın çözümü ve küçük özellik algılama ile birleştirilir: http: // jsfiddle .net/zaqx/PB6XL/ (IE8, IE9 ve tüm modern tarayıcılarda çalışır)

DÜZENLEME: Aşağıdaki yorumlarda Fiddle güncellendi.

+1

Bunu eklediğiniz için teşekkür ederiz. Tarayıcı algılama özelliğini, 'if (document.body.createTextRange)' gibi özellik algılama ile değiştirmeyi düşünün. Bu, gelecekteki tarayıcı sürümlerinin farklı yöntemler sunabileceği için kodunuzu gelecekte kanıtlayacaktır. Bu yaklaşımların [Nicholas Zakas'ın kapsamlı karşılaştırması] (http://www.nczonline.net/blog/2009/12/29/feature-detection-is-not-browser-detection/) adresine bakınız. – Anson

+0

Harika bir yazı. İşte önerilerinize göre güncellenmiş keman: http: // jsfiddle.net/zaqx/PB6XL/7/IE8, IE9, Opera, Chrome, FF, Safari'de test edilmiştir – Zaqx

İlgili konular