Не работает с переменной

306
11 июля 2017, 21:08

Подскажите почему работает:

$(".ms-noWrap[title ='10.07.2000']").attr("style","display: none");

не работает:

var data1 ='10.07.2000';
$(".ms-noWrap[title = data1]").attr("style","display: none");
Answer 1

Для простых переменных, которые не содержат в своих значениях точки, запятые, слэши - достаточно вставить переменную в строку, сконкатинировав эту переменную с ней (потому что данные внутри кавычек'' интерпретируются как строка. поэтому и переменная является простым текстом), либо с помощью интерполяции строк, появившейся в ES6 вставить переменную во внутрь строки.

Примеры взяты из ответа @Darth

var data1 ='666'; 
var data2 ='777'; 
 
$(".ms-noWrap[title = " + data1 + "]").attr("style","background: red;"); 
 
// Интерполяция, работает с ES6 
$(`.ms-noWrap[title = ${data2}]`).attr("style","background: green;");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="ms-noWrap" title="666">10.07.2000</div> 
<div class="ms-noWrap" title="777">10.07.2001</div>

Однако в вашем случае это не сработает, т.к. вы используете в качестве значения переменной дату, т.е. строку, содержащую точки. Парсер jquery парсит селектор регулярными выражениями и, видимо, это ломает ему мозг. Он не может понять откуда внезапно у атрибута title взялись запрещенные символы.

Поэтому для явного обозначения того факта, что нужно найти элемент, где значение атрибута title является строка, не зависимо от содержащих знаков, надо дополнительно обернуть переменную в кавычки. В итоге должно быть так:

var data1 ='10.07.2000'; 
var data2 ='10.07.2001'; 
 
$(".ms-noWrap[title = '" + data1 + "']").attr("style","background: red;"); 
// Интерполяция, работает с ES6 
$(`.ms-noWrap[title = '${data2}']`).attr("style","background: green;");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="ms-noWrap" title="10.07.2000">10.07.2000</div> 
<div class="ms-noWrap" title="10.07.2001">10.07.2001</div>

Пример с фильтрами не вижу смысла приводить.

Answer 2
//1. 
$(".ms-noWrap[title = "+data1+"]").attr("style","display: none");
// 2. 
$(`.ms-noWrap[title = ${data1}]`).attr("style","display: none");
//3. 
$('.ms-noWrap').filter(index => $(this).attr("title") === data1).attr("style","display: none");
READ ALSO
Как не полностью задвинуть блок за пределы экрана?

Как не полностью задвинуть блок за пределы экрана?

Ребята мне необходимо задвинуть блок с контентом за пределы экрана, но не полностью, а оставить 50 пикселейЯ пробую это делать вот так:

233
Не видны элементы списка в выпадающем меню

Не видны элементы списка в выпадающем меню

Собственно, мой тестовый сайт на джумлаЕсли уменьшить монитор, то менюшка прячется и должна выпадать по клику на иконку списка

270
Выпадающее по клику меню на мобильном

Выпадающее по клику меню на мобильном

Подскажите, пожалуйста, как реализовать подменю на мобильном, открывающееся по клику?

283