2016-10-10 8 views
0

Ich versuche, alle Instanzen von Text in einem HTML-Dokument in Titel-Case zu ändern. Der jQuery-Code funktioniert hier nur für ein einziges Auftreten.Konvertieren von Text in Titel-Case rekursiv mit jQuery

Wie kann dies gemacht werden, um rekursiv zu arbeiten? :

var ele = $('h3'); 
 
ele.text(toProperCase(ele.text())); 
 

 
function toProperCase(str) 
 
{ 
 
    var noCaps = ['of','a','the','and','an','am','or','nor','but','is','if','then', 
 
'else','when','at','from','by','on','off','for','in','out','to','into','with']; 
 
    return str.replace(/\w\S*/g, function(txt, offset){ 
 
     if(offset != 0 && noCaps.indexOf(txt.toLowerCase()) != -1){ 
 
      return txt.toLowerCase();  
 
     } 
 
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<h3>THE QUICK BROWN FOX IS ABOUT TO JUMP OVER THE FENCE</h3> 
 

 
<h3 style="color: red;">HELLO THERE</h3>

Antwort

1

.text() nur auf das erste Element gilt, verwenden, um eine Schleife

var ele = $('h3'); 
ele.each(function() { 
    $(this).text(toProperCase($(this).text())); 
} 

var ele = $('h3'); 
 
ele.each(function() { 
 
    $(this).text(toProperCase($(this).text())); 
 
}); 
 

 
function toProperCase(str) 
 
{ 
 
    var noCaps = ['of','a','the','and','an','am','or','nor','but','is','if','then', 
 
'else','when','at','from','by','on','off','for','in','out','to','into','with']; 
 
    return str.replace(/\w\S*/g, function(txt, offset){ 
 
     if(offset != 0 && noCaps.indexOf(txt.toLowerCase()) != -1){ 
 
      return txt.toLowerCase();  
 
     } 
 
     return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<h3>THE QUICK BROWN FOX IS ABOUT TO JUMP OVER THE FENCE</h3> 
 

 
<h3 style="color: red;">HELLO THERE</h3>

+0

Wow. Vielen Dank! Es funktioniert \ o / –