هل يمكنني محاكاة النص اختيار مع الماوس في جافا سكريبت ؟

StackOverflow https://stackoverflow.com/questions/1426256

  •  07-07-2019
  •  | 
  •  

سؤال

وأود أن تحديد النص على الصفحة من خلال محاكاة "زر الماوس الأيسر" واسحب لأسفل إلى محدد x,y الموقع (بالبكسل)

يمكن أن يتم ذلك مع جافا سكريبت ؟

هل كانت مفيدة؟

المحلول

لا أعتقد أنه من الممكن التحكم في الماوس في هذه الطريقة باستخدام جافا سكريبت.

ومع ذلك ، يمكنك اختيار أجزاء من المستند مباشرة باستخدام جافا سكريبت.على سبيل المثال:

var h3s = document.getElementsByTagName("h3");
var range = document.createRange();
range.selectNode(h3s[0]);
window.getSelection().addRange(range);

قد حدد أول h3 عنصر.

راجع أيضا: http://www.quirksmode.org/dom/range_intro.html لمزيد من المعلومات حول بناء نطاقات.

لتحديد كامل الجسم من الوثيقة ، يمكنك استخدام:

var body = document.getElementsByTagName("body")[0];
var range = document.createRange();
range.selectNode(body);
window.getSelection().addRange(range);

لتحديد 3rd حرف, يقول, 4 الفقرة في مستند محاولة:

var p4 = document.getElementsByTagName("p")[3].firstChild;
var range = document.createRange();
range.setStart(p4, 2);
range.setEnd(p4, 3);
window.getSelection().addRange(range);

نصائح أخرى

    /**
     * Select text between 2 elements. Support selection of continuous elements.
     * @param {Object} element1 begin element.
     * @param {Object} element2 end element.
     */
    function selectBetweenTwoElements(element1, element2) {
        if (window.getSelection) {
            /* all browsers, except IE 8 and IE 7 */
            var selection = window.getSelection();
            selection.removeAllRanges();
            var range = document.createRange();
            range.setStart(element1, 0);
            range.setEnd(element2, 1);
            selection.addRange(range);
        } else {
            /* works fine in IE 8 / IE 7 */
            if (document.body.createControlRange) {
                var range1 = document.body.createTextRange();
                range1.moveToElementText(element1);

                var range2 = document.body.createTextRange();
                range2.moveToElementText(element2);

                var range = document.body.createTextRange();
                range.setEndPoint("StartToStart", range1);
                range.setEndPoint("EndToEnd", range2);
                range.select();
            }
        }
    }

وبقدر ما أعرف أن لا يمكن القيام به. النص الوحيد الذي يمكنك تحديد في عنصر نموذج (جزء النص، إدخال النص الخ.)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top