سؤال

باستخدام jQuery، كيف يمكنني تمكين الإدراج المباشر لـ اقتباسات ذكية أثناء تحرير مربعات النص؟

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

المحلول

وعلى افتراض كنت تتحدث عن محاولة ليحل محل "و" ب علامات اقتباس متميزة تلقائيا: انها ليست بالضرورة فكرة جيدة خوارزميات لاختيار الطريقة المناسبة ليقتبس لمواجهة هشة ويمكن بسهولة أن ينخدع هناك شيوعا. صيغة علاقة مع النظر إلى الطابع قبل الاقتباس، والذي يستخدم من قبل برامج مثل مكتب، لكنهم غالبا ما يخطئ، وترك النص أسوأ حالا مما لو واحد لم يحاكم. في بعض الأحيان، وبطبيعة الحال، كنت لا تريد ونقلت الذكية على الإطلاق (وخاصة على موقع مثل هذا حيث أننا نتحدث كود).

إذا كان لالخاصة الراحة الكتابة الشخصية قد تتمكن من محاولة تثبيت تخطيط لوحة المفاتيح التي تسمح نقلت ذكية لأن تكتب مباشرة وصراحة.

ومع ذلك، إذا كنت لا بد، وهنا بعض رمز لتبدأ ...

<textarea id="foo" rows="6" cols="40"></textarea>

...

function AutoReplacer(element) {
    // List of replacement rules. Note currently with this simplistic code
    // replacements should be the same length as the original text.
    //
    replacements= [
        [' "', ' \u201C'],
        ['("', ' \u201C'],
        ['"', '\u201D']
    ];

    // Only attempt to use replacer behaviour if we can retain the cursor
    // position. Setting value by default moves the cursor to the end of the
    // input, which is too irritating.
    //
    if (getInputSelection(element)!==null) {
        element.onkeyup= function() {
            value= element.value;
            for (var i= 0; i<replacements.length; i++) {
                value= value.split(replacements[i][0]).join(replacements[i][1]);
            }
            if (value!=element.value) {
                var s= getInputSelection(element);
                element.value= value;
                setInputSelection(element, s);
            }
        };
    }
}

// Cross-browser (as much as possible anyway) cursor positioning
//
function getInputSelection(element) {
    if (element.selectionStart!==window.undefined) {
        return [element.selectionStart, element.selectionEnd];
    } else if (document.selection) {
        var BIG= 1000000;
        var range= document.selection.createRange();
        if (range.moveStart===window.undefined)
            return [0, 0];
        var start= -range.moveStart('character', -BIG);
        var end= -range.moveEnd('character', -BIG);
        return [start-1, end-1];
    } else return null;
}
function setInputSelection(element, s) {
    if (element.selectionStart!==window.undefined) {
        element.selectionStart= s[0];
        element.selectionEnd= s[1];
    } else if (document.selection) {
        var range= element.createTextRange();
        range.collapse(true);
        range.moveEnd('character', s[1]);
        range.moveStart('character', s[0]);
        range.select();
    }
}

new AutoReplacer(document.getElementById('foo'));

نصائح أخرى

أحد الخيارات هو استخدام العنصر "q" غير المعروف.

foo bar<q>quoted area</q>foo bar

بعد ذلك سيبذل وكيل المستخدم قصارى جهده لإنشاء أفضل عروض الأسعار.

لنبني على الجواب كينت: يمكنك استخدام العلامات ف، ومع ذلك، فإن معظم برامج التصفح فقط استخدام علامات التنصيص على التوالي افتراضيا، وIE لا يعرض أي اقتباسات

ويتم معالجتها في هذه IE7 + والمتصفحات الأخرى باستخدام CSS. وإليك ما وضعت في الأنماط بلدي:

q:before {
    content: "\201c";
}
q:after {
    content: "\201d";
}
q q:before {
    content: "\2018";
}
q q:after {
    content: "\2019";
}

والدفعة الاولى هي لعلامات الاقتباس المزدوجة مجعد، الثاني هو لعلامات الاقتباس المفردة المتعرجة (عندما يكون لديك متداخلة علامات ف).

وهذا لا يعمل في IE6. بلدي الحل الطبيعي هو وضع اللون على عناصر ف، ولذلك تبرز. جزء من بلادي "و * المسيخ ذلك، وهذا هو جيدة بما فيه الكفاية" استراتيجية لIE6.

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