2015-11-13 12 views
7

Używam następującego skryptu do znajdowania i zamiany tekstu na mojej stronie.Funkcja jQuery do znajdowania i zamiany

$("#content #tablelabel p").text(function (_, ctx) { return ctx.replace("Check In", "入住"); }); 

Ale są setki słów do znalezienia i zamiany. Niektóre z nich mają tę samą ścieżkę CSS. Czy możecie mi powiedzieć, jak zoptymalizować ten skrypt i stworzyć funkcję przekazywania ścieżki i słowa CSS do znalezienia i zamiany, aby wyeliminować powtarzanie tych samych skryptów?

Możliwe jest również przekazywanie wielu słów w celu znalezienia ich tekstu zastępczego. Na przykład bez pisania

$("#content #tablelabel p").text(function (_, ctx) { return ctx.replace("Room Type", "入住"); }); 
$("#content #tablelabel p").text(function (_, ctx) { return ctx.replace("Guests", "退房"); });  

mogę zrobić czegos potrzebowalem jak

$("#content #tablelabel p").text(function (_, ctx) { return ctx.replace({'Room Type': '房间类型','Guests': '房间类型'}); }); 

Dzięki

+1

Dlaczego robisz to za pomocą JS, a nie po stronie serwera przed wpisywanie tekstu w języku angielskim? – dchayka

Odpowiedz

5

Można iteracyjne nad obiekt zastąpić wszystkie wartości w nim jak

var tags = { 
 
    'Room Type': '入住', 
 
    'Guests': '退房' 
 
}; 
 
$("#content #tablelabel p").text(function(_, ctx) { 
 
    $.each(tags, function(tag, text) { 
 
    ctx = ctx.replace(tag, text); 
 
    }) 
 
    return ctx; 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="content"> 
 
    <div id="tablelabel"> 
 
    <p>Room Type</p> 
 
    <p>Guests</p> 
 
    </div> 
 
</div>

+0

Dzięki Arun. To wygląda dobrze. Czy możliwe jest również przekazanie ścieżki CSS? Becuase może zmienić ścieżkę CSS dla niektórych słów. Więc Idealnie mogę przekazać adres URL i ścieżkę CSS do funkcji i ją zastąpić. Ale nie chcę powtarzać ścieżki CSS, jeśli jest taka sama. – nasty

+1

Co rozumiesz przez ścieżkę CSS? –

5

Miałem to samo pragnienie nie tak dawno temu.

Rozważmy Usage (co uważam za bardziej wydajne & elastyczny):

//USAGE: 
var pattern = [ 
    { 
     selectors : ["p",".metoo","em"], 
     find  : ["set", "me", "free"], 
     replace : ["#set#", "@[email protected]", ">free<"] 
    }, 
    { 
     selectors : ["h5"], 
     find  : ["I", "quick", "easy"], 
     replace : ["^ $1 ^"]      //$1 is a token to use matched value 
    } 
]; 

replaceText(pattern); 

Jak widać funkcja akceptuje Array obiektów, które określa grupę elementów, tekst do znalezienia i zamienników. możesz ustawić tyle, ile chcesz.

Kilka uwag:

  1. $1 - zostanie zastąpiony przez dopasowane wartości.
  2. replace tablica musi mieć co najmniej jedną wartość - każdy dopasowany tekst zostanie zastąpiony przez odpowiadający mu tekst w innym niż poprzedni.

JSnippet Demo

i tutaj jest funkcja, która implementuje że:

var replaceText = function(pat) { 
    var ret = []; 
    for (var i = 0; i < pattern.length; i++) { 
     $(pattern[i].selectors.join(",")).text(function(ind,txt){ 
      for (var j=0; j < pattern[i].find.length; j++) { 
       if (typeof pattern[i].replace[j] !== 'undefined') { 
        rep = pattern[i].replace[j].replace("$1", pattern[i].find[j]); 
       } else if (pattern[i].replace.length) { 
        rep = pattern[i].replace[pattern[i].replace.length-1].replace("$1", pattern[i].find[j]); 
       } else { continue; } 
       txt = txt.replace(pattern[i].find[j], rep); 
      } 
      return txt; 
     }); 
    } 
}; 
5
$("#content #tablelabel p").text(function (_, ctx) {  
    return ctx.replace('Room Type','房间类型').replace('Guests','房间类型'); 
}); 
+0

Powinno być: '$ ('# content, #tabelabel, p") 'przegapiłeś śpiączkę. –

+1

@Shlomi Hassid, przestrzeń jest przeznaczona i ma właściwe znaczenie. – trincot

Powiązane problemy