javascript
  • jquery
  • arrays
  • string
  • shift
  • 2015-02-17 3 views 0 likes 
    0

    У меня есть документ с некоторым HTML:Найти элементы документа с помощью строки/массива с помощью сдвига

    <ul class="cl"> 
        <li> <span>span</span> 
    
        </li> 
    </ul> 
    

    У меня также есть строка, представляющая путь CSS для определенных элементов:

    var _string = 'div p ul.cl li span'; 
    

    Я хотел бы найти путь согласования на основе документа, так:

    ul.cl li span 
    

    так что я решил, чтобы использовать shift(), чтобы нарезать строку по одной части за раз, а затем попытаться найти ее в документе. Если совпадение найдено, я предупрежу:

    for (var i = 0; i < _array.length; i++) { 
    
        if ($(_array.shift()).length) { 
         alert(_array) 
        } 
    
    } 
    

    Это предупреждает li,span, но есть также ul.cl на странице Почему это не предупредит ul.cl,li,span? Что я делаю не так?

    Example at JsFiddle

    ответ

    1

    Dont использовать .shift. Он изменяет массив, который заставляет цикл for делать неожиданные вещи. Используйте индекс массива, чтобы получить элементы, как показано ниже.

    var _string = 'div p ul.cl li span'; 
    
    var _array = _string.split(' '); 
    for (var i = 0; i < _array.length; i++) { 
        var el = _array[i] 
        if ($(el).length) { 
         alert(el) 
        } 
    
    } 
    

    Обновлено JS-Fidlle

    +0

    Спасибо большое, что работает :) – Youss

    1

    отредактирован скрипку http://jsfiddle.net/67xs04f1/6/

    var _string = 'div p ul.cl li span'; 
    
    var _array = _string.split(' '); 
    
    $.each(_array, function (i, item) { 
        if ($(item).length) { 
         alert(item); 
        } 
    }); 
    

    попробовать что

    +0

    Спасибо за версию JQuery – Youss

    1

    Прежде всего, вы не должны работать на _array.length, если вы изменяете его внутри цикла по shift(), или что-нибудь еще в этом отношении.

    Теперь, почему он предупреждает, что он предупреждает после выполнения этого изменения:

    var arrLength = _array.length; 
    for (var i = 0; i < arrLength; i++) { 
    
        if ($(_array.shift()).length) { 
         alert(_array) 
        } 
    
    } 
    

    Первый матч будет на $(_array.shift()).length когда _array.shift() производит ul.cl, и после сдвига содержание массива li,span.

    Вот почему первое предупреждение - li,span.

    Аналогичным образом, следующее оповещение будет span, так как оно найдет li.

    И, наконец, предупреждение является пустым, поскольку после последней смены массив пуст.

    См. Fiddle.

    +0

    Спасибо за разработку + 1 – Youss

    0
    [0]:http://jsfiddle.net/67xs04f1/9/ 
    

    есть два образца, если хотите, чтобы элемент один за другим, и если у удалить элемент для и хотите perticular элемент

     Смежные вопросы

    • Нет связанных вопросов^_^