2013-09-16 6 views
0

Im пытается заменить строку текста на другую строку текста здесь мой код плюс JS скрипкиЗаменить строку текста Javascript

     <div class="label">Rating:</div> 
        <div class="data rating">****</div> 


var str=document.getElementsByClassName("data" ,"raiting").innerHTML; 
     var n=str.replace(/\*/g,"star"); 
     document.getElementsByClassName("data", "raiting").innerHTML=n; 

http://jsfiddle.net/sgGQz/1/

+0

'getElements' означает, что вы можете иметь несколько элементов, они находятся в 0 индексированный массив. Выберите один из них перед доступом к 'innerHtml'. – sinsedrix

ответ

5

document.getElementsByClassName() метод возвращает, как предполагает его название, коллекция (HTMLCollection) элементов, ни один -Даже если есть только один элемент с заданным именем класса (ов) в DOM.

Вам необходимо пройти через каждый из них, чтобы произвести такую ​​замену. Например:

var elements = document.getElementsByClassName("data rating"); 
for (var i = 0, l = elements.length; i < l; i++) { 
    elements[i].innerHTML = elements[i].innerHTML.replace(/\*/g, 'star'); 
} 

JSFiddle.

В качестве альтернативы, если вы точно знаете, что там должен быть только один элемент, вы можете назначить его непосредственно:

var elementToAdjust = document.getElementsByClassName("data rating")[0]; 
// ... 
+0

'рейтинг 'собирается сломать ваш код. Просто простая орфографическая ошибка в исходном посте. Также несколько классов, переданных 'getElementsByClassName', указываются как один аргумент с именами классов с разделителями пространства. Скрипка работает только потому, что второй аргумент «рейтинг», переданный 'getElementsByClassName', игнорируется. –

+1

В JS его «рейтинг», но в HTML его «рейтинг» –

+0

@KevinBowersox Ах да, конечно; он становится незаметным из-за того, как заданы параметры класса. Еще раз спасибо.) – raina77ow

0

Вы должны проверить снова getElementsByClassName, возвращает узел-List, так что вы можете сделать, как это и вы можете обходить, то после каждого элемента и установите ваше значение

var str=document.getElementsByClassName("data" ,"raiting")[0].innerHTML; 
var n=str.replace(/\*/g,"star"); 
document.getElementsByClassName("data", "raiting")[0].innerHTML=n; 

Вот example, как у вас есть только один вхождение

1

Если у вас есть только одно вхождение элемента это будет работать:

var str=document.getElementsByClassName("data rating")[0].innerHTML; 
var n=str.replace(/\*/g,"star"); 
document.getElementsByClassName("data rating")[0].innerHTML=n; 

Если несколько data rating элементы существуют использование:

var elems =document.getElementsByClassName("data rating"); 
    for(var i = 0; i < elems.length; i++){ 
     elems[i].innerHTML = elems[i].innerHTML.replace(/\*/g,"star"); 
    } 

Бо й метод исправить некоторые недостатки в исходном коде.

Во-первых, рейтинг был опечатан в аргументе, переданном getElementsByClassName. Во-вторых, getElementsByClassName() использует имена классов, разделенные пробелами, для выбора элементов с несколькими классами вместо нескольких аргументов. Get elementsByClassName возвращает массив элементов, которые нужно перебирать.

JS Fiddle:http://jsfiddle.net/sgGQz/5/

Смежные вопросы