2012-04-02 4 views
0

Как заменить слова «воскресенье» и «понедельник» на «SUN» и «MON», используя jquery в HTML ниже.Как заменить текст диапазона с использованием имени класса внутри div

<table> 
    <tr> 
    <th> 
     <div> 
     <div class="xyz"> 
      <a href="www.google.com"> 20 may <span>Sunday</span></a> 
     </div> 
     </div> 
    </th> 
    <th> 
     <div> 
     <div class="xyz"> 
      <a href="www.google.com"> 21 may <span>Monday</span></a> 
     </div> 
     </div> 
    </th> 
    </tr> 
</table> 
+0

Просьба предоставить образец HTML – Andrey

ответ

5

Вы можете использовать функцию :contains. Что он делает, он находит текст, который вы ищете, и заменяете его на целевой текст. Демо here. Единственное, что вам нужно будет выполнить отдельно для каждого слова, которое вы хотите заменить.

Html код

<div class="container"><span>Sunday</span></div> 
<div class="container"><span>Monday</span></div> 

Jquery код

$(".container span:contains('Sunday')").html('Sun');//Replace to Sun 
$(".container span:contains('Monday')").html('Mon');//Replace to Mon 
+0

спасибо он работает много для меня. –

+0

добро пожаловать – Dips

+0

как обменять SUN и '20 may 'в вышеуказанном коде как «SUN 20 мая» –

1

Попробуйте что-то вроде this jsfiddle. Вот код, который делает фактическую работу:

$(".xyz").each(function() { 
    var theSpan = $(this).find("span").first(); 

    switch (theSpan.text()) { 
     case "Sunday": 
      theSpan.text("SUN"); 
      break; 
     case "Monday": 
      theSpan.text("MON"); 
      break; 
     // include additional case statements 
    } 
}); 

Имейте в виду, что именно этот метод работает только для точного расположения, что у вас есть, потому что он использует find вызов, а затем использует first, чтобы получить только один span тег в структура оригинала div.

Если вы должны были предоставить класс в span, который содержит заменяемый текст, вы получите более согласованные результаты и, возможно, не нуждаетесь в вызове find.


В качестве варианта этого, вы могли бы использовать некоторые строки манипуляции, если то, что вы действительно ищете это «все прописные аббревиатура полного названия каждого дня.» Вместо большого switch заявления, вы могли бы сделать то же самое с этим кодом (also available in this jsfiddle):

$(".xyz").each(function() { 
    var theSpan = $(this).find("span").first(); 
    theSpan.text(theSpan.text().substr(0,3).toUpperCase()); 
}); 
+0

Предлагаемый альтернативный подход к применению изменения основан на предположении, что вы хотите только * первые 3 буквы * полного имени каждого дня. Это было экстраполировано из примеров, представленных в вопросе. Если вам нужно что-то отличное от трех букв независимо от дня, то вам, вероятно, придется придерживаться «switch» и явно перечислять каждый день заменяющего текста. – TLS

0
$(function(){ 
     $(".xyz").each(function(){ 
     var obj=$(this).text($(this).text(); 
      obj.replace('Sunday','Sun')); 
     obj.replace('Monday','Mon')); 
     }); 
    }); 

Did you mean this? 
+0

Вызов '$ (this)' так много раз неэффективен. Результат этого вызова должен быть кэширован в переменную и указан таким образом в функции 'each'. В противном случае это также жизнеспособное решение. – TLS

+0

да, но он выглядит только для класса xyz. – sujal

+0

Это акт преобразования объекта «this» в javascript в объект jQuery с использованием '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' '' '' '' '' '' '' '' '' медленно. Неважно, как вы находите исходный объект. Это преобразование из DOM в jQuery, которое должно быть кэшировано. – TLS

0

Попробуйте один

$(".xyz span:contains('Sunday')").text('Sun'); 
$(".xyz span:contains('Monday')").text('Mon'); 
Смежные вопросы