использование переменных в селекторе jquery

Я пытаюсь построить динамический селектор jquery со следующим кодом:

var section_id = "{segment_3}";
var num_children = $('#'+ section_id + ' ul').children().size();

где segment_3-это значение, которое я успешно извлекаю из строки url, которая, например, может возвращать значение "section_one"

но при попытке создать переменную num_children эта ссылка не работает. Как создать код для создания динамической ссылки? Спасибо за любую помощь.

4 ответов


предполагая, что VAR section_id = 'section_1' это:

$('#'+ section_id + ' ul').children().size();

даст вам

$('#section_1 ul').children().size();

и да,это также действительно. Это даст вам все элементы ul в элементе #section_1 (независимо от того, насколько глубоко они будут). Вероятно, вы получите массив элементов и вызовов .дети () на нем тоже отлично. Все должно сработать.


до HTML 4.01 атрибут id очень ограничен в отношении разрешенных символов значения (правила именования):

атрибут id должен начинаться с буквы A-Z или a - z, а затем: буквы (A-Za-z), цифры (0-9), дефисы ("-"), подчеркивания ( " _ "), двоеточия ( " :") и периоды."( ") и все ценности чувствительный к регистру.

*примечание: по моему опыту я обнаружил, что использование только строчных символов и _ для id делает их очень четкими, и они выделяются из CSS селекторы.( что-то: псевдокласс)*

С другой стороны, в HTML5 вы можете иметь почти все, что угодно, как значение id.

Ref:http://www.w3.org/TR/html5/elements.html#the-id-attribute

таким образом, ваш селектор отлично (действителен) со спецификациями HTML5, но для того, чтобы заставить его работать с jQuery, вам нужно избежать всех символов, которые использует анализатор селектора со специальным значением. И поскольку его код JavaScript, вы должны использовать два \ \ (первый ускользает от второго). JQuery не предлагает вам способ сделать это, поэтому ниже приведен код, который я использую:

пример:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>jQuery HTML5 Selector Escaping</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">

    // Ths is the list of special characters used by jquery selector parser
    // !"#$%&'()*+,./:;?@[\]^`{|}~
    $(document).ready(function() {
        var selector = '{my_%real{ly:s#tra`n[ge_i]d_n^@a|me>}';
        selector = selector.replace(/([ {}\|`\^@\?%#;&,.+*~\':"!^$[\]()=>|\/])/g,'\');
        var object = $('#'+selector+' ul').children().size();
        alert('UL has '+ object +' LIs');
    });

    </script>
</head>
<body>
    <div id="{my_%real{ly:s#tra`n[ge_i]d_n^@a|me>}">
        <ul>
            <li>Sehr</li>
            <li>Gut</li>
            <li>Doh</li>
        </ul>
    </div>
</body>
</html>

я отредактировал код, исправлено несколько ошибок. :)


попробовать

var num_children = $('#'+ section_id.substring(1, section_id.length-2) + ' ul').children().size();

приведенные выше комментарии верны... основной синтаксис селектора идентификаторов - $(#itemID)...

var myValue = $("#new_grouping_ " +i).функция val(); // это работает