2012-05-14 58 views
0

jquery的新手。我已經得到了這個在JavaScript運行,但切換到jQuery,所以我可以使用.each。是否有某些特殊規則阻止我在jQuerys內部使用JavaScript .replace.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,"_"); 

}) 

編輯:的更換目的是用下劃線來代替空格。

+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

我的我沒有在我的代碼中聲明所有的變量,但是我忘了將它們包含在我的例子中,你會得到這個檢查 –

1

編輯:的目的是替換用下劃線來代替空格。

更新使用的.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

對於.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

你介意解釋爲什麼?是因爲它是一個不必要的東西抽象是否做同樣的事情? –

+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]是完全有效的,這是不太可能的。