Страницы

Поиск по вопросам

четверг, 5 марта 2020 г.

Как скрыть текст (разного цвета!) под фоном до клика на него мышкой?

#javascript #html #jquery


Добрый день!

Хочу скрыть цветной текст под прямоугольником такого же цвета. Пример поправил, возможно
ли это сделать для текста разных цветов?



div.myHiddenBlock {
  color: green;
  background: green;
}

span.myVIPText
{
  color: red;
}

span.myVisibleBlock {
  color: green;
}
Текст, который нужно скрыть до клика мышкой


Ответы

Ответ 1



Вот пример: body { backround-color: #ffffff; } Текст, который нужно скрыть до клика мышкой Текст, который нужно скрыть до клика мышкой Простой текст

Ответ 2



body { color: green; } Текст, который нужно скрыть до клика мышкой

В чем разница между методом val jquery и свойством value в javascript?

#javascript #jquery


Когда перебираю массив из инпутов, то метод val() jquery выдает ошибку, а вот свойство
value javascript выводит значение атрибута value. В чем тут подвох?
    


Ответы

Ответ 1



Разница между методом val и свойством value довольно большая: Свойство находится непосредственно в элементе, и получает значение как есть. Если посмотреть реализацию метода val и опустить проверку на то, передали в метод параметр или нет и сразу перейти к получению значения можно отметить, что сначала проверяется наличие хуков: if ( hooks && "get" in hooks && ( ret = hooks.get( elem, "value" ) ) !== undefined ) { return ret; } И если они есть, то выполняется соответствующая функция. Если хуков нет, то получается значение, с помощью свойства value, и если полученное значение является строкой - перед возвратом из функции из строки будут удалены символы \r с помощью замены по регулярному выражению rreturn Ошибку при вызове метода val можно получить, если пытаться вызвать этот метод у нативного html элемента, а не у объекта jQuery. Для решения, достаточно обернуть имеющийся элемент, в объект: $(element).val();

Ответ 2



.val() - метод, применяемый к объекту JQ. Использование объекта jQuery начинается с вызова одноименной функции - $("селектор")..value - применяется к элементу DOM. Работа с элементом DOM начинается с document.getElementByТипСелектора("егоНазвание"). Для наглядности примера - ссылка, нужно открыть консоль в браузере! И кликнуть единственную кнопку.

Проверка, чтобы все числа номера телефона были не одинаковые

#javascript #jquery


В продолжение своего вопроса о маске телефона возник еще один вопрос.

Как можно усовершенствовать код ( регулярное выражение), чтобы НЕ было возможности
ввести все цифры одинаковыми? Т.е. Если пользователь вводит номер +7(111)111-1111 должна
появляться ошибка, но если например так: +7(111)111-1112, то все отлично. 



$('form').validate();
$('.js-phone').mask("+7(999)999-9999", {autoclear: false});

jQuery.validator.addMethod("checkMask", function(value, element) {
  return /\+\d{1}\(\d{3}\)\d{3}-\d{4}/g.test(value); 
});
label {
  display: block;
  margin: 10px 0;
}

.error {
  color: red;
}



  


Ответы

Ответ 1



Не уверен, что можно обойтись одним регулярным выражением, но можно добавить второе регулярное выражение, в котором проверить, что все цифры одинаковые. Для этого можно воспользоваться возможностью проверять уже найденные группы например: /\+\d\((\d){3}\)\1{3}-\1{4}/g Пример: $('form').validate(); $('.js-phone').mask("+7(999)999-9999", { autoclear: false }); jQuery.validator.addMethod("checkMask", function(value, element) { return /\+\d{1}\(\d{3}\)\d{3}-\d{4}/g.test(value) && !/\+\d\((\d){3}\)\1{3}-\1{4}/g.test(value); }); label { display: block; margin: 10px 0; } .error { color: red; }


Поиск описания параметра команды в man

#linux #man


Предположим, что я хочу узнать назначение параметра -s команды curl. 
Я выполняю man curl. 
Далее мне нужно найти секцию параметра -s, она начинается примерно так:

   -s, --silent
          Silent  or  quiet  mode. Don't show progress meter or error messages. 
Makes Curl mute. It will still output the data you ask
          for, potentially even to the terminal/stdout unless you redirect it.


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



Все способы, которыми я пользуюсь сейчас, основаны на поиске строк вроде -s, -s,
и других. 
Поиск выполняю через /ввожу искомую строкуEnter. Перехожу между найденными вхождениями
с помощью n (следующее вхождение) и N (предыдущее вхождение). 
Вот мои способы:


Поискать -s. Чтобы добраться до искомой секции придётся нажимать n больше 10 раз.
Первый способ с добавлением пробела в конец. Не работает в данном случае, так как
у параметра -s есть длинная версия --silent, поэтому в описании секции после названия
параметра стоит запятая, а не пробел.
Первый способ с добавлением запятой в конец. В данном случае позволяет перейти к
искомой секции всего за одно нажатие n, в общем случае может потребоваться больше нажатий,
также этот способ не работает для параметров без длинной версии.


Видно, что все способы не очень удобны.
    


Ответы

Ответ 1



1. При поиске через / и используя регулярное выражение -s[ ,] можно сделать поиск по обоим вариантам: -s и --silent: -S, --show-error When used with -s, --silent, it makes curl show an error message if it fails. -s, --silent See also -v, --verbose and --stderr. ... 2. При поиске через & и а. -s выводятся все строки, соответствующие поисковому запросу: ... --sasl-ir --service-name Examples: --negotiate --service-name sockd would use sockd/server-name. -S, --show-error When used with -s, --silent, it makes curl show an error message if it fails. -s, --silent See also -v, --verbose and --stderr. --socks4 --socks4a --socks5-gssapi-nec ... б. -s[ ,] уже совсем хорошо: -S, --show-error When used with -s, --silent, it makes curl show an error message if it fails. -s, --silent See also -v, --verbose and -s, --silent. Use -s, --silent to make curl really quiet. Получается, что чем точнее составлено регулярное выражение, тем быстрее найдёте.

Ответ 2



Нужно искать строку " -s" (два пробела, а затем короткое имя команды). Почти всегда нужная секция должна находиться с первого раза, иначе можно увеличить число пробелов.

Почему так не рекомендуется писать?

#java #android #задание_на_собеседовании


Делал тестовое задание на вакансию Junior Android разработчика, в коде была строчка:

ArrayList valNames = new ArrayList();


Мне сказали, что лучше писать так: 

List valNames = new ArrayList(); 


Потом в одной из статей на habrahabr.ru встретилась фраза:


  Подумаешь, большое дело, что человек не понимает почему нужно писать 
  List values = new ArrayList(); вместо ArrayList values = ….; Ну и кому
  же не хочется увидеть названия в стиле ArrayList arrayList = new
  ArrayList(); и улыбнуться. Жаль только, что с применением данного
  антипатерна, все эти, вызывающие улыбку, вещи обычно обнаруживаются
  после приблизительно месяца работы.


Объясните, почему так писать неправильно. Формально - ошибки нет?
    


Ответы

Ответ 1



Обычно это объясняется так: если кодер объявляет переменную типа ArrayList вместо List - он не понимает что все нужные ему методы уже есть в интерфейсе. Тем самым демонстрируется непонимание основных принципов проектирования, ведь ему на самом деле совсем не требуется именно ArrayList, он может использовать любую другую коллекцию! ... с той же асимптотикой операций... упс. На самом деле те, кто так пишет, защищаются от автоматических рефакторингов, способных преобразовать переменную конкретного типа в параметр метода, что проявит их непонимание основных принципов проектирования привыкли к IDE, которые подчеркивают такие места желтым и предлагают исправить тип переменной. Это просто привычка. Для большинства алгоритмов, выдумываемых на ходу, ArrayList<> является единственной коллекцией с адекватными временами выполнения операций и нет никакой разницы какого типа объявлять переменную. А вот за типами параметров методов или возвращаемых значений надо и правда следить внимательнее, выбирая наименьший подходящий интерфейс - это упростит стыковку кода, написанного разными программистами.

Ответ 2



Это носит больше религиозно/стилистический оттенок, нежели формальный. Объявление List шире чем декларация ArrayList, то есть когда человек пишет List он типа демонстрирует свою ООП сущность, как бы понимает, что underlying объект может быть и ArrayList и Vector и Stack и т.д. и декларируя List абстрагируется от конкретной реализации. На самом то деле, насколько это правильно или нет - напоминает дискуссии средневековых схоластов о сущности универсалий

Как найти преобладающий цвет на изображении?

#javascript #jquery




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

Возможно, вы знаете уже готовые библиотеке. Заранее, признателен за помощь.
    


Ответы

Ответ 1



Есть маленькая библиотека RGBaster (briangonzalez/rgbaster.js) Она позволяет сделать ровно то, что вам нужно. Ниже пример ее использования. // Для примера я загружаю изображение по URL, а не из тела документа var img = 'http://briangonzalez.github.io/jquery.adaptive-backgrounds.js/img/main-images/6.jpg'; RGBaster.colors(img, { // Не учитывать белый цвет exclude: ['rgb(255,255,255)'], success: function(payload) { // console.log(payload.dominant); // Преобладающий цвет // console.log(payload.secondary); // Второй по популярности цвет // console.log(payload.palette); // Палитра цветов (по умолчанию 30) // Устанавливаем фоновый цвет равный самому популярному. document.body.style.background = payload.dominant; } }); img { width: 250px; display: block; margin: 0 auto; }

Ответ 2



Библиотека Vibrant.js позволяет реализовать то, что вам нужно. Более подробный пример - тут. var img = document.querySelector('img'); img.setAttribute('src', img.getAttribute('data-src')); img.crossOrigin = "Anonymous"; img.addEventListener('load', function() { var vibrant = new Vibrant(img); var swatches = vibrant.swatches(); for (var swatch in swatches) if (swatches.hasOwnProperty(swatch) && swatches[swatch]) console.log(swatch, swatches[swatch].getHex()) });

Итератор с методами класса

#cpp


У меня есть класс FileSystem, и я хочу хочу сделать, чтобы с итераторов можно было
выполнять некоторые методы самого класса. Для этого в итератор добавил указатель на
класс чтобы методы вызванные с итератора были примерно такими:

int FileSystem::iterator::make_dir(const std::string& name){
    return указатель_на_FileSystem->make_dir(name,указатель_на_Dir );
}


метод в классе FileSystem: 

int FileSystem::make_dir(const std::string& name, Dir* & cur_dir);


Создавать итератор хотел так

iterator(this,указатель_на_Dir);


Проблема в том, что this - константный, соответственно в итераторе можно создавать
можно только константные указатели на FileSystem и выполнять только константные методы.
Вопрос заключается в том, стоит ли делать 

 const_cast<...>(this)


и насколько это плохо. Возможно стоит как-то пересмотреть архитектуру или использовать
что-то другое?
    


Ответы

Ответ 1



this может иметь несколько разных типов: T * const при вызове функции-члена на константном объекте (т.е. нельзя изменять как сам this, так и то, на что он указывает); T * при вызове на изменяемом объекте (по прежнему нельзя изменять this, но можно изменять объект, на который он указывает); ещё пара вариантов с volatile (в данном случае, не рассматриваем). Если создание вашего итератора происходит в константной функции, то и this имеет соответствующий тип. Таким образом, как минимум следует создавать итератор там, где объект, указываемый this может изменяться. Более того, не обязательно создавать итератор именно из функции-члена. Преобразования const_cast, сбрасывающие константность у действительно константных объектов приводят к неопределённому поведению. Поэтому тут надо быть крайне осторожным. В качестве возможного подхода предлагаю рассмотреть ситуацию с итераторами для стандартных контейнеров. Они имеют как const-версию, так и обычную. Т.е. существуют два отдельных класса итераторов. Надеюсь, такое объяснение позволит решить Вашу проблему.