मैं सोच रहा हूं कि कैसे मैं एक एंकर टैग के क्लिक पर jquery का उपयोग करके पाठ क्षेत्र में पाठ सम्मिलित कर सकता हूं।
मैं पहले से ही textarea में पाठ को बदलना नहीं चाहता, मैं textarea को नया पाठ जोड़ना चाहता हूं।
मैं सोच रहा हूं कि कैसे मैं एक एंकर टैग के क्लिक पर jquery का उपयोग करके पाठ क्षेत्र में पाठ सम्मिलित कर सकता हूं।
मैं पहले से ही textarea में पाठ को बदलना नहीं चाहता, मैं textarea को नया पाठ जोड़ना चाहता हूं।
जवाबों:
जेसन की टिप्पणियों में आपके क्या प्रयास हैं:
$('a').click(function() //this will apply to all anchor tags
{
$('#area').val('foobar'); //this puts the textarea for the id labeled 'area'
})
संपादित करें- पाठ को नीचे देखने के लिए अपील करने के लिए
$('a').click(function() //this will apply to all anchor tags
{
$('#area').val($('#area').val()+'foobar');
})
मुझे jQuery फ़ंक्शन एक्सटेंशन पसंद है। हालाँकि, यह jQuery ऑब्जेक्ट को संदर्भित करता है DOM ऑब्जेक्ट नहीं। इसलिए मैंने इसे और बेहतर बनाने के लिए इसे थोड़ा संशोधित किया है (एक ही बार में कई टेक्स्टबॉक्स / टेक्स्टारिस में अपडेट कर सकते हैं)।
jQuery.fn.extend({
insertAtCaret: function(myValue){
return this.each(function(i) {
if (document.selection) {
//For browsers like Internet Explorer
this.focus();
var sel = document.selection.createRange();
sel.text = myValue;
this.focus();
}
else if (this.selectionStart || this.selectionStart == '0') {
//For browsers like Firefox and Webkit based
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
});
}
});
यह वास्तव में अच्छी तरह से काम करता है। आप एक साथ कई स्थानों पर सम्मिलित हो सकते हैं, जैसे:
$('#element1, #element2, #element3, .class-of-elements').insertAtCaret('text');
sel
वैश्विक होना?
मैं अपने कोड में इस फ़ंक्शन का उपयोग करता हूं:
$.fn.extend({
insertAtCaret: function(myValue) {
this.each(function() {
if (document.selection) {
this.focus();
var sel = document.selection.createRange();
sel.text = myValue;
this.focus();
} else if (this.selectionStart || this.selectionStart == '0') {
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos) +
myValue + this.value.substring(endPos,this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = startPos + myValue.length;
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
});
return this;
}
});
input{width:100px}
label{display:block;margin:10px 0}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Copy text from: <input id="in2copy" type="text" value="x"></label>
<label>Insert text in: <input id="in2ins" type="text" value="1,2,3" autofocus></label>
<button onclick="$('#in2ins').insertAtCaret($('#in2copy').val())">Insert</button>
यह 100% मेरा नहीं है, मैंने इसे कहीं पर देखा और फिर मेरा ऐप के लिए ट्यून किया।
उपयोग: $('#element').insertAtCaret('text');
मुझे पता है कि यह एक पुराना प्रश्न है, लेकिन इस समाधान की खोज करने वाले लोगों के लिए यह ध्यान देने योग्य है कि आपको एक पाठ्य सामग्री में सामग्री जोड़ने के लिए परिशिष्ट () का उपयोग नहीं करना चाहिए। append () विधि का लक्ष्य आंतरिक HTML है, जो textarea का मूल्य नहीं है। सामग्री टेक्सटेरिया में दिखाई दे सकती है लेकिन यह तत्व के फॉर्म वैल्यू में नहीं जोड़ा जाएगा।
जैसा कि ऊपर उल्लेख किया गया है:
$('#textarea').val($('#textarea').val()+'new content');
ठीक काम करेगा।
यह आपको पाठ के एक टुकड़े को टेक्स्टबॉक्स में "इंजेक्ट" करने की अनुमति देता है, इंजेक्शन का अर्थ है: उस पाठ को जोड़ता है जहां कर्सर है।
function inyectarTexto(elemento,valor){
var elemento_dom=document.getElementsByName(elemento)[0];
if(document.selection){
elemento_dom.focus();
sel=document.selection.createRange();
sel.text=valor;
return;
}if(elemento_dom.selectionStart||elemento_dom.selectionStart=="0"){
var t_start=elemento_dom.selectionStart;
var t_end=elemento_dom.selectionEnd;
var val_start=elemento_dom.value.substring(0,t_start);
var val_end=elemento_dom.value.substring(t_end,elemento_dom.value.length);
elemento_dom.value=val_start+valor+val_end;
}else{
elemento_dom.value+=valor;
}
}
और आप इसे इस तरह से उपयोग कर सकते हैं:
<a href="javascript:void(0);" onclick="inyectarTexto('nametField','hello world');" >Say hello world to text</a>
जब हमारे पास "टेक्स्ट में टैग डालें" कार्यक्षमता होती है, तो मज़ेदार और अधिक सीन्स होते हैं।
सभी ब्राउज़रों में काम करता है।
.focus()
इनवोकेशन और अपडेट्स को निकाल लिया । स्पैनिश चर का उपयोग किसी अन्य उत्तर के औचित्य के लिए किया जा सकता है ...selectionStart
selectionEnd
हेज यह एक संशोधित संस्करण है जो मेरे लिए एफएफ @ लिस्ट में ओके का काम करता है और करियर की स्थिति में सम्मिलित होता है
$.fn.extend({
insertAtCaret: function(myValue){
var obj;
if( typeof this[0].name !='undefined' ) obj = this[0];
else obj = this;
if ($.browser.msie) {
obj.focus();
sel = document.selection.createRange();
sel.text = myValue;
obj.focus();
}
else if ($.browser.mozilla || $.browser.webkit) {
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
var scrollTop = obj.scrollTop;
obj.value = obj.value.substring(0, startPos)+myValue+obj.value.substring(endPos,obj.value.length);
obj.focus();
obj.selectionStart = startPos + myValue.length;
obj.selectionEnd = startPos + myValue.length;
obj.scrollTop = scrollTop;
} else {
obj.value += myValue;
obj.focus();
}
}
})
आपने कोशिश की है:
$("#yourAnchor").click(function () {
$("#yourTextarea").val("your text");
});
हालांकि ऑटोहिघलाइटिंग के बारे में निश्चित नहीं है।
संपादित करें :
जोड़ने के लिए:
$("#yourAnchor").click(function () {
$("#yourTextarea").append("your text to append");
});
append()
ए के मूल्य पर काम नहीं करता है textarea
। append()
विधि innerHTML, पाठ क्षेत्र की नहीं मूल्य निशाना बनाता है।
क्या आप के लिए पूछना चाहिए सीधे jQuery में सीधा होना चाहिए-
$(function() {
$('#myAnchorId').click(function() {
var areaValue = $('#area').val();
$('#area').val(areaValue + 'Whatever you want to enter');
});
});
सबसे अच्छा तरीका है कि मैं सम्मिलित पाठ को हाइलाइट करने के बारे में सोच सकता हूं यह एक सीएसएस वर्ग के साथ एक स्पैन में लपेटकर background-color
आपकी पसंद के रंग के साथ सेट है। अगले इंसर्ट पर, आप किसी भी मौजूदा स्पैन से क्लास को हटा सकते हैं (या स्पैन्स को स्ट्रिप कर सकते हैं)।
हालाँकि, बाजार पर बहुत सारे मुफ्त WYSIWYG HTML / रिच टेक्स्ट एडिटर उपलब्ध हैं, मुझे यकीन है कि कोई आपकी ज़रूरतों को पूरा करेगा
यहाँ एक त्वरित समाधान है जो jQuery 1.9+ में काम करता है:
ए) कार्यवाहक स्थिति प्राप्त करें:
function getCaret(el) {
if (el.prop("selectionStart")) {
return el.prop("selectionStart");
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
};
ख) कैरेट स्थिति में पाठ जोड़ें:
function appendAtCaret($target, caret, $value) {
var value = $target.val();
if (caret != value.length) {
var startPos = $target.prop("selectionStart");
var scrollTop = $target.scrollTop;
$target.val(value.substring(0, caret) + ' ' + $value + ' ' + value.substring(caret, value.length));
$target.prop("selectionStart", startPos + $value.length);
$target.prop("selectionEnd", startPos + $value.length);
$target.scrollTop = scrollTop;
} else if (caret == 0)
{
$target.val($value + ' ' + value);
} else {
$target.val(value + ' ' + $value);
}
};
ग) उदाहरण
$('textarea').each(function() {
var $this = $(this);
$this.click(function() {
//get caret position
var caret = getCaret($this);
//append some text
appendAtCaret($this, caret, 'Some text');
});
});
यह क्रोम 20.0.11 में मेरे लिए अच्छा काम करता है
var startPos = this[0].selectionStart;
var endPos = this[0].selectionEnd;
var scrollTop = this.scrollTop;
this[0].value = this[0].value.substring(0, startPos) + myVal + this[0].value.substring(endPos, this[0].value.length);
this.focus();
this.selectionStart = startPos + myVal.length;
this.selectionEnd = startPos + myVal.length;
this.scrollTop = scrollTop;
मुझे लगता है कि यह बेहतर होगा
$(function() {
$('#myAnchorId').click(function() {
var areaValue = $('#area').val();
$('#area').val(areaValue + 'Whatever you want to enter');
});
});
यह @panchicore द्वारा दिए गए उत्तर के समान है जिसमें एक छोटी बग निश्चित है।
function insertText(element, value)
{
var element_dom = document.getElementsByName(element)[0];
if (document.selection)
{
element_dom.focus();
sel = document.selection.createRange();
sel.text = value;
return;
}
if (element_dom.selectionStart || element_dom.selectionStart == "0")
{
var t_start = element_dom.selectionStart;
var t_end = element_dom.selectionEnd;
var val_start = element_dom.value.substring(value, t_start);
var val_end = element_dom.value.substring(t_end, element_dom.value.length);
element_dom.value = val_start + value + val_end;
}
else
{
element_dom.value += value;
}
}
सरल समाधान होगा: ( मान लें : आप चाहते हैं कि जो भी आप टेक्स्टबॉक्स के अंदर टाइप करें , वह टेक्स्टएडिया में पहले से ही मौजूद है )
<A> टैग के ऑनक्लिक इवेंट में, उपयोगकर्ता-परिभाषित फ़ंक्शन लिखें, जो यह करता है:
function textType(){
var **str1**=$("#textId1").val();
var **str2**=$("#textId2").val();
$("#textId1").val(str1+str2);
}
(जहां आईडी, textId1 - ओ / पी के लिए textArea textId2 -for i / p textbox ')
$.fn.extend({
insertAtCaret: function(myValue) {
var elemSelected = window.getSelection();
if(elemSelected) {
var startPos = elemSelected.getRangeAt(0).startOffset;
var endPos = elemSelected.getRangeAt(0).endOffset;
this.val(this.val().substring(0, startPos)+myValue+this.val().substring(endPos,this.val().length));
} else {
this.val(this.val()+ myValue) ;
}
}
});
मैं इस्तेमाल किया है और यह ठीक काम :)
$("#textarea").html("Put here your content");
रेमी