Bugün bunu yapıyorum. Bu sizin yanıtınızın bir kombinasyonudur alex ve diğer google içindeki diğer sonuçlar. Bunu, bilgisayardaki IE9, Chrome, Opera, Safari ve Firefox tarayıcılarında ve ayrıca varsayılan tarayıcı olan Firefox, Chrome ve Opera ile Android ile bir HTC Sensation'da test ettim.
Yalnızca mobil aygıttaki Opera'nın bazı sorunları oldu.
Çözümümün:
// Control
var BSControl = function(iControl)
{
// Variable
var tControl = (typeof iControl == 'string' ? document.getElementById(iControl) : iControl);
// Get Caret
this.mGetCaret = function()
{
// Resultaat aanmaken
var tResult = -1;
// SelectionStart
// *) Input & Textarea
if(tResult == -1 && (tControl.selectionStart || tControl.selectionStart == '0'))
{
tResult = tControl.selectionStart;
}
// ContentWindow.GetSelection
// *) IFrame
if(tResult == -1 && (tControl.contentWindow && tControl.contentWindow.getSelection))
{
var tRange= tControl.contentWindow.getSelection().getRangeAt(0);
tResult = tRange.startOffset;
}
// GetSelection
// *) Div
if(tResult == -1 && (window.getSelection))
{
var tRange= window.getSelection().getRangeAt(0);
tResult = tRange.startOffset;
}
// Resultaat teruggeven
return tResult;
}
// Set Caret
this.mSetCaret = function(iPosition)
{
// SelectionStart
// *) Input & Textarea
if(tControl.selectionStart || tControl.selectionStart == '0')
{
tControl.selectionStart = iPosition;
tControl.selectionEnd = iPosition;
return;
}
// ContentWindow.GetSelection
// *) IFrame
if(tControl.contentWindow && tControl.contentWindow.getSelection)
{
var tRange = tControl.contentDocument.createRange();
tRange.setStart(tControl.contentDocument.body.firstChild, iPosition);
tRange.setEnd(tControl.contentDocument.body.firstChild, iPosition);
var tSelection = tControl.contentWindow.getSelection();
tSelection.removeAllRanges();
tSelection.addRange(tRange);
return;
}
// GetSelection
// *) Div
if(window.getSelection)
{
var tSelection = window.getSelection();
var tRange= tSelection.getRangeAt(0);
tRange.setStart(tControl.firstChild, iPosition);
tRange.setEnd(tControl.firstChild, iPosition);
tSelection.removeAllRanges();
tSelection.addRange(tRange);
return;
}
}
// Get Selection
this.mGetSelection = function()
{
// Resultaat aanmaken
var tResult = null;
// SelectionStart
// *) Input & Textarea
if(tResult == null && (tControl.selectionStart || tControl.selectionStart == '0'))
{
tResult = this.mGet().substring(tControl.selectionStart, tControl.selectionEnd);
}
// ContentWindow.GetSelection
// *) IFrame
if(tResult == null && (tControl.contentWindow && tControl.contentWindow.getSelection))
{
var tSelection = tControl.contentWindow.getSelection()
tResult = tSelection.toString();
}
// GetSelection
// *) Div
if(tResult == null && (window.getSelection))
{
var tSelection = window.getSelection()
tResult = tSelection.toString();
}
// Resultaat teruggeven
return tResult;
}
// Set Selection
this.mSetSelection = function(iFrom, iUntil)
{
// SelectionStart
// *) Input & Textarea
if(tControl.selectionStart || tControl.selectionStart == '0')
{
tControl.selectionStart = iFrom;
tControl.selectionEnd = iUntil;
return;
}
// ContentWindow.GetSelection
// *) IFrame
if(tControl.contentWindow && tControl.contentWindow.getSelection)
{
var tRange = tControl.contentDocument.createRange();
tRange.setStart(tControl.contentDocument.body.firstChild, iFrom);
tRange.setEnd(tControl.contentDocument.body.firstChild, iUntil);
var tSelection = tControl.contentWindow.getSelection();
tSelection.removeAllRanges();
tSelection.addRange(tRange);
return;
}
// GetSelection
// *) Div
if(window.getSelection)
{
var tSelection = window.getSelection();
var tRange= tSelection.getRangeAt(0);
tRange.setStart(tControl.firstChild, iFrom);
tRange.setEnd(tControl.firstChild, iUntil);
tSelection.removeAllRanges();
tSelection.addRange(tRange);
return;
}
}
// Set
this.mSet = function(iValue)
{
// Afhankelijk van aanwezige property waarde instellen
if('value' in tControl)
{
tControl.value = iValue;
}else if('innerText' in tControl)
{
tControl.innerText = iValue;
}else if('textContent' in tControl)
{
tControl.textContent = iValue;
}else if('innerHTML' in tControl)
{
tControl.innerHTML = iValue;
}
}
// Get
this.mGet = function()
{
// Resultaat aanmaken
var tResult = null;
// Afhankelijk van aanwezige property waarde instellen
if('value' in tControl)
{
tResult = tControl.value;
}else if('innerText' in tControl)
{
tResult = tControl.innerText;
}else if('textContent' in tControl)
{
tResult = tControl.textContent;
}else if('innerHTML' in tControl)
{
tResult = tControl.innerHTML;
}
// Resultaat teruggeven
return tResult;
}
}
Kontrol dışarı [rangy] (http://code.google.com/p/rangy/) –
sonra sen şapka konumuna ne tür? 'İçerik bilgisi' öğeleri ve/veya metin/metin girdileri için çözümler ister misiniz? Piyanist pozisyonu nasıl temsil edilmelidir? –