€
$
₴
₽
EN
RU
Vmeste.EU
Лента
Каталог
Файлы
Форумы
Услуги
Основное
Radiotalk
Пользовательское
Программирование
6 •
Посмотреть все темы
Проблемы с contenteditable
1
4619
Web3r
@Web3r
01.01.2016
Имеется редактируемый div. В нем может быть много текста, который не помещается по длине.
Проблема в выделении этого текста при помощи курсора. В обычном input если мы выделим любое слово и потащим курсор влево/вправо, текст будет прокручиваться и выделяться.
С contenteditable такая шутка не работает и текст остается статичным:
**********
Есть какие-нибудь решения?
1555
Алексей
@TheDark
01.01.2016
Web3r
, Opera 34, таких проблем нет, все прокручивается...
Отредактировано TheDark -
01.01.2016
4619
Web3r
@Web3r
01.01.2016
Похоже, только на лисе так.
3910
Дмитрий
@Q-Tec
01.01.2016
В хроме тоже норм
4619
Web3r
@Web3r
02.01.2016
Выяснилось, что проблема не в contenteditable, а в CSS.
Лиса не дает скроллить текст курсором, если есть overflow:hidden.
4619
Web3r
@Web3r
16.01.2016
Не создаю новую тему.
Ребята, как можно быстрее перебрать относительно большой массив или объект? Как вообще лучше с т.з. производительности реализовать следующую задачу:
Имеется множество значений, например, ["abcde", "abcdb", "abedf", etc... ] и одно единственное значение "qwerty123", которое необходимо найти в данном множестве.
При этом совпадение может быть частичным по первым символам, т.е. если в массиве идет [ ... ,"qwerty1234", ... ], то на нем необходимо остановить дальнейшее сравнение и выполнить определенную функцию.
К сожалению, в такого рода переборах не силен. Как бы вы реализовали это?
2970
удалён
@Foggy
16.01.2016
[spoiler=EcmaScript 5]Вот как-то так на чистом JS:
var users = ["Foggy", "Pegass", "query123", "Web3r", "BETEPAH"];
function findArray(arr, string) {
var text = '';
arr.forEach(function(el, i, ar) {
var diff = string.length - el.length;
if(string.length >= el.length) {
var cropped = string.slice(0, -diff);
if(cropped != el) return;
text = el;
}
});
return text;
}
console.log(
findArray(users, "query1234")
);
Можно сократить функцию вот до такого, но я бы рекомендовал использовать верхний вариант, потому что он читабельнее
function findArray(arr, string) {
arr.forEach(function(el) {
var diff = string.length - el.length;
if(diff >= 0 && el == string.slice(0, -diff)) string = el;
});
return string;
}
[/spoiler]
Вариант, написанный на ещё пишущейся спецификации EcmaScript 7 уже работает в последних браузерах:
var users = ["Foggy", "Pegass", "query123", "Web3r", "BETEPAH"];
function findArray(arr, string) {
arr.map((el) => { if(string.includes(el)) string = el; });
return string;
}
console.log(
findArray(users, "query1234")
);
Отредактировано Foggy -
17.01.2016
20090
Dimitry
@Dimitry
17.01.2016
не думаю что стандартный метод перебором будет значительно медленее, а может быть даже быстрее ...
2970
удалён
@Foggy
17.01.2016
быстрее, да. однако, есть ещё вопрос читабельности и величины кода. если любую функцию упрощать до самой быстрой, код оказывается неоправданно громоздким.
пусть каждый сам выбирает. тут аж три варианта получилось.
20090
Dimitry
@Dimitry
17.01.2016
Если почитать ТЗ то там
> Как вообще лучше с т.з. производительности реализовать следующую задачу
а не как написать 2 строки нестандартным методом для некоторых браузеров.
К тому же реализовано в корне не верно ибо задача звучит так:
> необходимо остановить дальнейшее сравнение и выполнить определенную функцию.
Если читать ещё лучше то можно было обратить внимание на:
> совпадение может быть частичным
по первым
символам
И того, твой пост скорее спам для галочки.
Не так уж и много коду:
var word="abcd";
var arr=["xabcd","abcde", "abcdb", "abedf"];
var len=word.length;
for(var i in arr) if(arr[i].indexOf(word)==0) {
alert(arr[i]);
break;
}
А за тупую минусовку которая уже не первый раз, в след. раз вылетишь с форума.
4619
Web3r
@Web3r
21.01.2016
Foggy
,
Dimitry
,
**********