2012-05-14 3 views
0

Новое в jquery. Я уже получил это работает в javascript, но я перешел на jquery, поэтому я могу использовать .each. Есть ли какое-то специальное правило, запрещающее мне использовать JavaScripts .replace внутри jQuerys .each?

var jse_sanitized_title = ""; 
    var jse_article_title = ""; 

    var jse_article_titles = $('.jse_article_title'); 

    $.each(jse_article_titles, function(i) { 

    jse_article_title = jse_article_titles[i].innerHTML; 

      //error for this says jse_article_titles[i].replace is not a function 
    jse_sanitized_title = jse_article_titles[i].replace(/ /g,"_"); 

}) 

EDIT: Цель замены - заменить пробелы символом подчеркивания.

+0

'jse_article_titles [i]' - элемент DOM, а не строка. –

+1

Вы переопределяете строку в каждом цикле! Что ты пытаешься сделать? – gdoron

+0

Вместо '$ .each (jse_article_titles' вы можете сделать' jse_article_titles.each ('. –

ответ

2

Предположительно вы имеете в виду:

$.each(jse_article_titles, function(i) { 

    jse_article_title = jse_article_titles[i].innerHTML; 

      //error for this says jse_article_titles[i].replace is not a function 
    jse_sanitized_title = jse_article_title .replace(/ /g,"_"); 
    jse_article_titles[i].innerHTML = jse_sanitized_title; 

}) 

Если вы еще не объявили jse_article_title, поставить вар здесь, как:

var jse_article_title = jse_article_titles[i].innerHTML; 

Обратите внимание, что вы должны передать его в конце. Наконец, особых правил нет. jQuery - это просто библиотека.

+0

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

1

EDIT: Цель необходимости замены заключается в замене пространства с подчеркиванием.

Обновлено использовать .text() функцию, чтобы установить заменить все spaces с _

DEMO

$('.jse_article_title').text(function() { 
    return this.innerHTML.replace(/ /g, '_'); 
}); 

Может быть вам нужно

jse_sanitized_title = jse_article_title.replace(/ /g,"_"); 
//using the jse_article_title 

или

jse_sanitized_title = jse_article_titles[i].innerHTML.replace(/ /g,"_"); 

или с помощью JQuery,

jse_sanitized_title = $(this).text().replace(/ /g, "_"); 
3
$.each(jse_article_titles, function() { 
    jse_article_title = this.innerHTML; 
    jse_sanitized_title = jse_article_title.replace(/ /g,"_"); 
}); 

После обновления, похоже, что вы хотите сделать что-то вроде этого:

$('.jse_article_title').each(function(){ 
    this.innerHTML = this.innerHTML.replace(/ /g,"_"); 
}); 

Там есть другой способ с jQuery:

$('.jse_article_title').html(function(index, old){ 
    return old.innerHTML.replace(/ /g,"_"); 
}); 
+1

+1 для метода .html(). Похоже, это самый подходящий способ сделать это «способ jquery», –

+0

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

0

Попробуйте это:

$.each(jse_article_titles, function() { 

    jse_article_title = $(this).html(); 

    jse_sanitized_title = jse_article_title.replace(/ /g,"_"); 

}) 
+1

'this.innerHTML' лучше, чем' $ (this) .html() '... – gdoron

+0

вы не понимаете, почему? Это потому, что это лишний y абстракция, которая делает то же самое? –

+2

@LittleBigBot: поскольку использование собственных свойств DOM * немного * быстрее, чем вызов функции jQuery для этого. –

0

Чтобы сделать это так, как вы пытаетесь (с innerHTML), вы должны ссылаться на узел с Get() ... Вы должны были бы сделать это:

jse_article_titles.get(i).innerHTML 

Однако вы должны уметь немного сократить это.

$('.jse_article_title').each(function() { 
    $(this).html($(this).html().replace(/ /g,"_")); 
}); 

// or 

$('.jse_article_title').each(function() { 
    this.innerHTML = this.innerHTML.replace(/ /g,"_"); 
}); 

// whichever floats your boat 

[РЕДАКТИРОВАТЬ]: Извините, я ошибся в необходимости .get(). jse_articles_titles [i] отлично действует, если число не является отрицательным, что маловероятно.