[jquery] مسج تعيين وضع المؤشر في div



1 Answers

ربما أكون قد أخطأت في قراءة السؤال ، ولكني لم أفعل ما يلي (بافتراض أن <div> مع "editable" قابلة للتحرير)؟ يوجد الموقِّت لأنه في Chrome ، يبدو أن سلوك المتصفح الأصلي الذي يحدد العنصر بالكامل يظهر بعد حدث focus ، وبالتالي يتجاوز تأثير رمز الاختيار ما لم يتم تأجيله إلى ما بعد الحدث البؤري:

var div = document.getElementById("editable");

div.onfocus = function() {
    window.setTimeout(function() {
        var sel, range;
        if (window.getSelection && document.createRange) {
            range = document.createRange();
            range.selectNodeContents(div);
            range.collapse(true);
            sel = window.getSelection();
            sel.removeAllRanges();
            sel.addRange(range);
        } else if (document.body.createTextRange) {
            range = document.body.createTextRange();
            range.moveToElementText(div);
            range.collapse(true);
            range.select();
        }
    }, 1);
};

div.focus();
Question

النسخة القديمة من السؤال أدناه ، بعد البحث أكثر ، قررت إعادة صياغة السؤال. المشكلة كما كانت من قبل ، أحتاج إلى التركيز على قسم محتوى مناسب دون إبراز النص ، حيث يؤدي التركيز بشكل مستقيم إلى إبراز النص في Chrome.

أدرك أن الناس حلوا هذه المشاكل في textareas عن طريق إعادة وضع الإقحام في textarea. كيف يمكنني القيام بذلك باستخدام عنصر قابل للرضا؟ جميع الإضافات التي حاولت استخدامها فقط مع textareas. شكر.

الصياغة القديمة للسؤال:

لدي عنصر مضمونًا أريد التركيز عليه ، ولكن فقط بقدر ما يضع المؤشر في مقدمة العنصر ، بدلاً من تحديد كل شيء.

elem.trigger('focus'); مع jquery يحدد كل النص في العنصر بأكمله في chrome. يعمل فايرفوكس بشكل صحيح ، مع وضع علامة الإقحام في الجزء الأمامي من النص. كيف يمكنني جعل Chrome يتصرف بالطريقة التي أريدها ، أم أن التركيز قد لا يكون ما أبحث عنه.

شكرا لكم جميعا.




تمكنت من حل هذه المشكلة بعد قليل من بدس حول DOM.

elm.focus();
window.getSelection().setPosition(0);

ربما يعمل فقط على متصفحات WebKit ، ولكن بما أنه المصدر الوحيد للمشكلة ، فقد أضفتُ شرطيًا (باستخدام jQuery)

if(!$.browser.webkit) {
    elm.focus();
} else {
    elm.focus();
    window.getSelection().setPosition(0);
}

نأمل أن يكون هذا يحل مشكلتك.




Related