В jQuery как сохранить конкретную строку шаблона в переменную? - PullRequest
3 голосов
/ 10 января 2012

Я хотел бы удалить строку текста с подстановочными знаками из существующей строки, а затем добавить ее после разделителя.

В моем случае я хотел бы найти номер детали из строки,и затем установите эту строку в переменную.

Таким образом, вместо этого (обратите внимание, между [] может быть что угодно):

<div> The part number is [8F8S0JJ9]</div>
<div> The second part number is [V9S7D73]</div>

У меня будет:

<div> The part number is</div>
[8F8S0JJ9]
<div> The second part number is</div>
[V9S7D73]

Вот мой код:

// Get the product number that lies between [ ] marks from all div elements
$('div:contains('['+*+']')').html(function() { 

//Look for the wildcard string and save it to a variable. how can I search within the string?!
        var $finalstring = $(this).search('['+*+']');

//remove it from the string
$(this).replace($finalstring, '');

//Set it to display after the string
$(this).append($finalstring);
    });

Спасибо

Ответы [ 5 ]

1 голос
/ 10 января 2012

Я бы упростил вещи и просто использовал класс:

$('.part').each(function(){
    var $this       = $(this), 
        partnum_reg = /(\[(.)+\])/g,
        partnum     = String($this.html().match(partnum_reg));

    $this.html($this.html().replace(partnum, ''));
    $('<div/>').insertAfter($this).html(partnum);
});

Демо: http://jsfiddle.net/hB4Zp/

0 голосов
/ 10 января 2012

Вот возможное решение, в котором предполагается, что подстановочный знак всегда является последним словом в предложении:

http://jsfiddle.net/Aq9qe/

<div class='str'>Here is the [wildcard]</div>

var str = $('.str').html();
var split = str.split(' ');

var wild = split.pop();

$('.str').html(str.replace(wild, ' '));
$('.str').after(wild);
0 голосов
/ 10 января 2012

Во-первых, я не могу просто сделать это с помощью селекторов jQuery. Поэтому вам нужно создать свой собственный фильтр. Используя простое регулярное выражение, вы можете получить тот же эффект. Во-вторых, вам нужно удалить существующий контент. Наконец, вам нужно вставить этот контент после оригинального div. У вас неправильный синтаксис, но вот способ сделать это:

http://jsfiddle.net/zbE2F/

$("div").filter(function(index){
    return /\[.*\]/.test($(this).html());
}).each(function() { 
    var $finalstring = $(this).html().match(/\[.*\]/)[0];
    $(this).html($(this).html().replace(/\[.*\]/),"");
    $("<div></div>").insertAfter(this).append($finalstring);
});

надеюсь, это приблизит вас к тому, что вам было нужно, но учтите, что если в любое время div содержит две целевые строки, у вас будут проблемы.

0 голосов
/ 10 января 2012

Я также добавлю свое решение, даже если оно в основном совпадает с хахой Джозефа.

http://jsfiddle.net/PjdXr/

var reg = /\[.*\]/;
$("div").filter(function(){
    return $(this).text().match(reg);  
}).html(function(i,h) { 
    var nr = h.match(reg);
    $(this).after(nr[0]);
    return h.replace(reg,'');
});
0 голосов
/ 10 января 2012

Если вы не хотите использовать комбинацию string.indexOf('') и string.substring(''), попробуйте следующий плагин, связанный с этим ответом:

Регулярные выражения селектора jQuery

...