Соответствующие элементы, чьи идентификаторы начинаются со строки, не совпадая только со строкой - PullRequest
1 голос
/ 15 февраля 2012

Я пытаюсь использовать пользовательский интерфейс JQuery для написания функции, которая принимает идентификатор строки и скрывает все остальные строки, имеющие идентификатор, начиная с идентификатора, переданного в качестве аргумента функции. (Я пытаюсь что-то вроде сворачивания дочерних строк, если щелкнуть родительскую строку).

Например,

Если переданный идентификатор равен «1», все строки, имеющие идентификаторы «11», «111», «12», «121», «122» и т. Д., Должны быть скрыты, но не та, в которой идентификатор просто '1' * * 1005

Если переданный идентификатор равен «2», все строки, имеющие идентификаторы «21», «211», «22», «221», «222» и т. Д., Должны быть скрыты, но не та, в которой идентификатор просто '2'

В настоящее время я пытаюсь что-то вроде этого:

$(function() {
        // run the currently selected effect
        function runEffect(divId) {

            // set effect type
            var selectedEffect = "blind";

            // most effect types need no options passed by default
            var options = {};

            // run the effect
            $('tr[id^=%s]'.replace('%s',divId)).hide( selectedEffect, options, 1000, callback );
        };

        // callback function
        function callback() {

        };

        // set effect from select menu value
        $( "tr" ).click(function() {
            var divId = this.getAttribute('id');
            runEffect(divId);
            return false;
        });
    });

Это прекрасно работает только с одной проблемой. Он также скрывает строку с идентификатором, который был передан. Поэтому, если я нажимаю на строку с идентификатором, равным «1», она скрывает все строки с идентификатором, равным 1, и строки, начинающиеся с 1. Я просто хочу скрыть все остальные строки, начинающиеся с идентификатора 1, но не ту, у которой идентификатор - просто «1». .

Please help!

1 Ответ

1 голос
/ 15 февраля 2012

Вы можете добавить туда .not, чтобы сделать это:

$('tr[id^=%s]'.replace('%s',divId)).not('#' + divId).hide...

Примечание 1: Я не думаю, что буду использовать replaceтам, и в целом, вы должны окружить значение атрибута кавычками (хотя с указанными вами значениями идентификаторов все в порядке без кавычек, так как у них нет пробелов; в общем, это просто хорошая идея).Например:

$('tr[id^="' + divId + '"]'.not('#' + divId).hide...

Примечание 2: id значения, начинающиеся с цифр, недопустимы в CSS ;они не могут начинаться с цифры.Они также недопустимы в HTML до HTML5 , что расширило диапазон допустимых значений.Поскольку jQuery использует селекторы в стиле CSS, при использовании jQuery я склонен придерживаться наиболее строгой формы значений идентификаторов (CSS).FWIW.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...