Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Скрыть элемент в зависимости от содержимого (https://javascript.ru/forum/dom-window/73297-skryt-ehlement-v-zavisimosti-ot-soderzhimogo.html)

310 04.04.2018 17:57

Скрыть элемент в зависимости от содержимого
 
Здравствуйте, умные люди.
У меня такая задача:
Если выбран город "Ростов-на-Дону" в блоке.cityName, скрыть блок.main_li.
Код вот такой
jQuery(document).ready(function () {    
        var text = jQuery('.cityName').text();
        if (parseInt(text) == 'г. Ростов-на-Дону') {
            jQuery('.main_li').style.display = 'none';
        };
	});

не срабатывает.
Прошу помощи

laimas 04.04.2018 18:00

Цитата:

Сообщение от 310
if (parseInt(text) == 'г. Ростов-на-Дону')

А как может быть результат возвращаемый parseInt равен строковому значению?

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

310 04.04.2018 18:05

Значения могут быть разные, но если вот так
<a class="jstore-tag cityName lsp-js-changeTerminalForm">г. Ростов-на-Дону</a>

то нужно скрыть li.main_li

laimas 04.04.2018 18:08

jQuery(document).ready(function () {   
        if (jQuery('.cityName').text() == 'г. Ростов-на-Дону') jQuery('.main_li').hide();

    });

j0hnik 04.04.2018 18:15

if (parseInt(text) == 'г. Ростов-на-Дону')

аналог
if (false)

:D

310 05.04.2018 11:25

Опишу подробнее
<div class="jstore-tag city-terminal-c">
        Ресторан:
        
        <a class="jstore-tag cityName lsp-js-changeTerminalForm">г. Ростов-на-Дону</a>
        
    </div>

По клику на ссылку в модальном окне выбирается город.
Я подумал повесить указанный выше скрипт на клик по ссылке
jQuery('.cityName').click(function () {  

	        if (jQuery('.cityName').text() == 'г. Ростов-на-Дону') jQuery('.main_li').hide();

	    });

:no: не работает
:help: :help:

laimas 05.04.2018 12:29

.cityName - это ссылка, а значит как минимум нужно отменять действие по умолчанию:

jQuery('.cityName').click(function (e) { 
    e.preventDefault(); 
    if (jQuery('.cityName').text() == 'г. Ростов-на-Дону') jQuery('.main_li').hide();
});


Остальная "неработа" может быть связана с некорректной установкой обработчика. Вот только зачем эта проверка на содержимое если "в модальном окне выбирается город"? А если сотни городов, что так и будет перечислять в куче условий?

310 05.04.2018 12:58

Всего два города и больше не будет.
Цитата:

Остальная "неработа" может быть связана с некорректной установкой обработчика.
Как найти ошибку?

laimas 05.04.2018 13:06

Цитата:

Сообщение от 310
Как найти ошибку?

Какую? Я же не знаю чего не работает. Если установка обработчика

jQuery(document).ready(function () {
    jQuery('.cityName').click(function (e) {
        e.preventDefault();
        if (jQuery('.cityName').text() == 'г. Ростов-на-Дону') jQuery('.main_li').hide();
    });
})


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

310 06.04.2018 08:25

Да вроде все так, но то, что мне нужно, не происходит.
Не сочтите за труд, гляньте на страницу http://dimash24.ru/, пожалуйста

laimas 06.04.2018 08:40

А что нужно?

310 06.04.2018 10:38

Справа от логотипа выбор города, если выбран Ростов, скрыть блок "Пицца" :)

laimas 06.04.2018 12:18

В списке что-ли? А если я захочу изменить город, тогда как как это сделать?

310 06.04.2018 14:13

Вот на картинке схематично изобразил.

laimas 06.04.2018 14:21

Ну так это типа фильтра вы ходите сделать, так?

310 06.04.2018 14:37

Ну вроде того

laimas 06.04.2018 14:55

Не выставляйте таких картинок, они прокручивают страницу, это мешает просмотру основного.

У вас же сервер знает, что кому принадлежит. Поэтому, при выводе страницы свяжите опции списка со соответствующими LI содержащими их изображения именами классов. Можно и по data-id, тогда в обработчике изменения:

$('span.cityItem').click(function() {
    $('li[data-id]').not($('li[data-id!='+this.getAttribute('data-id')+']').hide()).show()
})


добавив эти атрибуты LI

<li data-id="51c88886-7a23-f24e-0161-5b68dac8dc1d"...
<li data-id="51c88886-7a23-f24e-0161-56abf9398685"...

соответственно.

310 06.04.2018 16:49

Вы вот так имеете в виду?
jQuery(document).ready(function () {

$('span.cityItem').click(function() {
    $('li[data-id="51c88886-7a23-f24e-0161-56abf9398685"]').not($('li[data-id!='+this.getAttribute('data-id')+']').hide('.main_li')).show()
})

	})

laimas 06.04.2018 17:13

Цитата:

Сообщение от 310
Вы вот так имеете в виду?
...
$('li[data-id="51c88886-7a23-f24e-0161-56abf9398685"]')

А разве я так написал?

$('li[data-id]').not($('li[data-id!='+this.getAttribute('data-id')+']').hide()).show() - означает


$('li[data-id]') - все элементы LI имеющие атрибут data-id
.not($('li[data-id!='+this.getAttribute('data-id')+']').hide()) - исключая те, у которых значение этого атрибута не равно значению span, по которому щелкнули, и которые нужно скрыть
.show() - показать

Если сделать так как вы пишите, то будут показывать только те, значения которых равно указанному. Что трудно дать LI которые относятся к тому или иному городу те же самые атрибуты как и города (span) и проверить как работает?

kostyanet 07.04.2018 20:46

Цитата:

Сообщение от 310
гляньте на страницу

Кнопку "вниз" сделай наверху. Ну никто ж не догадается, что надо крутить. Какие-то еще города выбирать. Список сделай из select'а и не пудри моск. )))


Часовой пояс GMT +3, время: 13:37.