Получить слова из строки в нескольких делениях, используя цикл for с jQuery или регулярным выражением - PullRequest
1 голос
/ 31 января 2012

В настоящее время я создаю список на лету с помощью jQuery.Приведенное ниже решение несколько хакерское, я знаю, поэтому мне интересно, можно ли его вставить в цикл, чтобы я мог перебирать каждый элемент div и создавать список.Спасибо за вашу помощь !!

         var text0 = $('#d0').text(); 
         var textArr0 = text0.split('*');

         var text1 = $('#d1').text(); 
         var textArr1 = text1.split('*');

         var text2 = $('#d2').text(); 
         var textArr2 = text2.split('*');

         $("#d0").html('<ul></ul>');
         $("#d1").html('<ul></ul>');
         $("#d2").html('<ul></ul>');


         $.each(textArr0, function (k, v) {
            $("#d0 ul").append('<li>' + '<a>' + v + '</a>' +  '</li>');
         });

         $.each(textArr1, function (k, v) {
            $("#d1 ul").append('<li>' + '<a>' + v + '</a>' +  '</li>');
         });

         $.each(textArr2, function (k, v) {
            $("#d2 ul").append('<li>' + '<a>' + v + '</a>' +  '</li>');
         });

Ответы [ 3 ]

2 голосов
/ 31 января 2012

Чтобы упростить повторное использование, попробуйте превратить логику обработки в плагин:

(function($) {
    $.fn.listFromText = function() {
        var $source = this;
        var text = this.text();
        var delimiter = "*";

        $source.html("<ul></ul>");

        $.each(text.split(delimiter), function (k, v) {
            $("ul", $source).append('<li>' + '<a>' + v + '</a>' +  '</li>');
        });
    };
})(jQuery);

$("#d0").listFromText();
$("#d1").listFromText();
$("#d2").listFromText();

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

2 голосов
/ 31 января 2012

Это приведенная в порядок версия того, что вы уже получили ...

$(function() {
    $("#d0, #d1, #d2").each(function() {
        var text = $(this).text();
        var textArr = text.split("*");
        $(this).html("<ul></ul>");
        for(var i = 0; i < textArr.length; i++) {
            $(this).find("ul").append('<li><a>' + textArr[i] + '</a></li>');
        };
    });
});

Но я бы рекомендовал дать элементам d0 / d1 / d2 и т. Д. Класс и использовать $(".className")чтобы идентифицировать их, чтобы вы могли иметь столько, сколько вам нужно, без необходимости изменять этот код.

Вот демонстрация ... http://jsfiddle.net/77vM9/

1 голос
/ 31 января 2012
(function($) {
    $.fn.textTolist = function() {
        var textArr = $(this).text().split('*'),
        target = $(this).empty().append('<ul></ul>');
        for (var i = 0; i < textArr.length; i++) {
            $('ul', target).append('<li><a>' + textArr[i] + '</a></li>');
        }
    };
})(jQuery);

$('#d0, #d1, #d2').each(function() {
    $(this).textTolist();
});
...