Используйте регулярный итератор, чтобы выполнить итерации назад, или бороться с reverse_iterator?

Я также пытаюсь заставить Autocompleter проигнорировать размывание, если определенный нажатый элемент и имеет рабочее решение, но только для Firefox из-за explicitOriginalTarget

Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap( 
        function(origfunc, ev) {
            if ($(this.options.ignoreBlurEventElement)) {
                var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode : ev.explicitOriginalTarget);
                if (!newTargetElement.descendantOf($(this.options.ignoreBlurEventElement))) {
                    return origfunc(ev);
                }
            }
        }
    );

Это значение по умолчанию оберток кода onBlur метод Autocompleter и проверки, если ignoreBlurEventElement параметры установлен. если это установлено, это проверяет каждый раз, чтобы видеть, является ли нажатый элемент ignoreBlurEventElement или нет. Если это, Autocompleter не делает cal onBlur, еще это называет onBlur. Единственная проблема с этим состоит в том, что это только работает в Firefox, потому что explicitOriginalTarget свойством является конкретный Mozilla. Теперь я пытаюсь найти различный путь, чем использование explicitOriginalTarget. Решение, которое Вы упомянули, требует, чтобы Вы добавили onclick поведение вручную к элементу. Если мне не может удаться решить проблему explicitOriginalTarget, я предполагаю, что буду следовать за Вашим решением.

9
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

Причина использования обратных итераторов заключается в том, что стандартные алгоритмы не знают, как перебирать коллекцию в обратном порядке. Например:

#include <string>
#include <algorithm>
std::wstring foo(L"This is a test, with two letter a's involved.");
std::find(foo.begin(), foo.end(), L'a'); // Returns an iterator pointing
                                        // to the first a character.
std::find(foo.rbegin(), foo.rend(), L'a').base()-1; //Returns an iterator
                                                 // pointing to the last A.
std::find(foo.end(), foo.begin(), L'a'); //WRONG!! (Buffer overrun)

Используйте любой итератор, чтобы получить более четкий код.

7
ответ дан 4 December 2019 в 21:10
поделиться

Для чего это стоит, Эффективный STL Скотта Мейерса рекомендует просто использовать обычный старый итератор (элемент 26).

3
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: