Умные цитаты с использованием JQuery

Как с помощью jQuery включить динамическую вставку умные цитаты при редактировании текстовых полей?

Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
1
0
1 802
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Один из вариантов - использовать малоизвестный элемент q.

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

тогда пользовательский агент сделает все возможное, чтобы создать цитаты в лучшем стиле.

Очень круто, но жаль, что в IE не работает. Пройдет много времени, пока он будет пригоден для использования

Darryl Hein 18.01.2009 05:22
Ответ принят как подходящий

Предположим, вы говорите о попытке автоматически заменить "и" умными кавычками: это не обязательно хорошая идея. Алгоритмы выбора правильного способа отображения цитат хрупки, и их легко обмануть. Существует общая формула, которую нужно делать с просмотром символа перед цитатой, который используется в таких программах, как Office. Но они часто делают ошибки, в результате чего текст становится хуже, чем если бы вы не пробовали. Иногда, конечно, вам не нужны умные кавычки в все (особенно на таком сайте, где мы говорим о коде).

Если это для вашего личного удобства набора текста, вы можете попробовать установить раскладку клавиатуры, которая позволяет вводить умные кавычки прямо и явно.

Тем не менее, если вам нужно, вот код для начала ...

<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'));

Это работает довольно чисто, когда вам нужно просто заменить одинарные кавычки (') фигурной версией: ’

Jeff Davis 03.02.2012 19:25

Чтобы основываться на ответе Кента: вы можете использовать теги q, однако большинство браузеров по умолчанию используют только прямые кавычки, а IE не отображает никаких кавычек.

Это исправлено в IE7 + и других браузерах с помощью CSS. Вот что я добавил в свои таблицы стилей:

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

Первая партия предназначена для фигурных двойных кавычек, вторая - для фигурных одинарных кавычек (когда у вас есть вложенные теги q).

Это не работает в IE6. Мое обычное решение - установить цвет для q элементов, чтобы они выделялись. Это часть моей стратегии «на хуй, это достаточно хорошо» для IE6.

+1 за цвет и «к черту IE, это достаточно хорошо». Раньше я использовал цвет и просто забыл.

Kent Fredric 19.01.2009 13:48

Другие вопросы по теме