Vurgulanan metni örneğin jQuery kullanarak bir web sitesinin paragrafında elde etmek mümkün müdür?
Vurgulanan metni örneğin jQuery kullanarak bir web sitesinin paragrafında elde etmek mümkün müdür?
Yanıtlar:
Kullanıcının seçtiği metni almak nispeten basittir. windowVe documentnesnelerinden başka bir şeye ihtiyacınız olmadığından jQuery'yi dahil ederek kazanılmanın bir yararı yoktur .
function getSelectionText() {
var text = "";
if (window.getSelection) {
text = window.getSelection().toString();
} else if (document.selection && document.selection.type != "Control") {
text = document.selection.createRange().text;
}
return text;
}
Seçimler <textarea>ve metin <input>öğeleriyle de ilgilenecek bir uygulama ile ilgileniyorsanız , aşağıdakileri kullanabilirsiniz. Şimdi 2016 beri IE <= 8 desteği için gerekli kodu atlıyorum ama SO birçok yerde bunun için şeyler yayınladım.
function getSelectionText() {
var text = "";
var activeEl = document.activeElement;
var activeElTagName = activeEl ? activeEl.tagName.toLowerCase() : null;
if (
(activeElTagName == "textarea") || (activeElTagName == "input" &&
/^(?:text|search|password|tel|url)$/i.test(activeEl.type)) &&
(typeof activeEl.selectionStart == "number")
) {
text = activeEl.value.slice(activeEl.selectionStart, activeEl.selectionEnd);
} else if (window.getSelection) {
text = window.getSelection().toString();
}
return text;
}
document.onmouseup = document.onkeyup = document.onselectionchange = function() {
document.getElementById("sel").value = getSelectionText();
};
Selection:
<br>
<textarea id="sel" rows="3" cols="50"></textarea>
<p>Please select some text.</p>
<input value="Some text in a text input">
<br>
<input type="search" value="Some text in a search input">
<br>
<input type="tel" value="4872349749823">
<br>
<textarea>Some text in a textarea</textarea>
window.getSelection()) içindir. document.selection.typeÇek seçimi bir metin seçimi ziyade bir kontrol seçimi olduğunu test ediyor. IE'de, bir kontrol seçimi, düzenlenebilir bir öğenin içinde, anahatlar ve yeniden boyutlandırma tutamaçları olan bir veya daha fazla öğe (görüntüler ve form denetimleri gibi) içeren bir seçimdir. .createRange()Böyle bir seçim çağırırsanız , a ControlRangeyerine bir olsun TextRangeve ControlRanges textözelliği yok .
selectionStartveya olmayan selectionEndbir <input>öğe türünde ("sayı" gibi) uyarı almanızdır. destekleyin ( örneğin bkz. jsfiddle.net/6zoposby/2 ). Ben selectionStartkodu IE <= 8 kırmayacak şekilde varlığı için kontrol bıraktı . Ben kontrol için activeElementmuhtemelen şimdi overkill olduğunu itiraf . Kullanıyorum sliceçünkü daha güçlü (burada kullanışlı olmasa da) ve yazmaktan biraz daha kısa substring.
Vurgulanan metni şu şekilde alın:
window.getSelection().toString()
ve elbette, örneğin:
document.selection.createRange().htmlText
document.selection IE10'da destek kaldırıldı ve onunla değiştirildi window.getSelection ”. Kaynak: connect.microsoft.com/IE/feedback/details/795325/…
Bu çözüm, krom kullanıyorsanız (diğer tarayıcıları doğrulayamıyorsanız) ve metin aynı DOM Öğesinde bulunuyorsa çalışır:
window.getSelection().anchorNode.textContent.substring(
window.getSelection().extentOffset,
window.getSelection().anchorOffset)
Kullanın window.getSelection().toString().
Developer.mozilla.org adresinden daha fazla bilgi edinebilirsiniz