2015-12-29 5 views
0

Мне нужно преобразовать строку кода jQuery в простой старый JavaScript. Может ли кто-нибудь меня вести?jquery to Plain Преобразование Javascript

$('a').filter(function(index) { 
    return $(this).text() === "Officer Title Equivalent*"; 
}).each(function() { 
    $(this).html($(this).html().replace("*", "<span style='color:red'>*</span>")); 
}); 
+0

http://stackoverflow.com/questions/978799/is-there-an- easy-to-convert-jquery-code-to-javascript – CoderPi

+1

Какая поддержка необходима (в частности, IE)? Кроме того, что вы пробовали до сих пор? –

+0

См. Http://youmightnotneedjquery.com/ или https://plainjs.com/javascript/ – Mottie

ответ

3

Для буквального перевода ...

Захватите a элементы.

var a = document.getElementsByTagName('a'); 

Использование slice принуждать нодлист в массив узлов, а затем использовать методы массива filter и forEach

[].slice.call(a).filter(function (el) { 
    return el.textContent === 'Officer Title Equivalent*'; 
}).forEach(function (el) { 
    el.innerHTML = el.textContent.replace('*', '<span style="color:red">*</span>'); 
}); 

DEMO

Другой вариант, что gurvinder намекают на его вопрос - нет необходимости в filter, только условное:

[].slice.call(a).forEach(function (el) { 
    var txt = el.textContent; 
    if (txt === 'Officer Title Equivalent*') { 
    el.innerHTML = txt.replace('*', '<span style="color:red">*</span>'); 
    } 
}); 

DEMO

Иосиф (комментарии) прав - вы также можете сделать:

[].forEach.call(document.getElementsByTagName('a'), function (el) { 
    var txt = el.textContent; 
    if (txt === 'Officer Title Equivalent*') { 
    el.innerHTML = txt.replace('*', '<span style="color:red">*</span>'); 
    } 
}); 

DEMO

+0

Хороший ответ. Есть ли особая причина, по которой вы решили использовать '[] .slice.call (a) .forEach (function (el) {...' вместо 'Array.prototype.filter.call (a, function (el) {. Есть ли существенная разница в совместимости? –

+0

Теперь, когда я смотрю на нее ближе, вы можете использовать '[] .filter.call (a, function (el) {...' в том же ключе, что и вы есть. –

+0

@JosephMarikle, привычка, почти все. – Andy

0

это должно быть так же просто, как

var allAnchors = document.getElementsByTagName("a"); 
for (var counter = 0; counter < allAnchors.length; counter++) 
{ 
    var node = allAnchors.item(counter); 
    if (node.innerText === "Officer Title Equivalent*") 
    { 
     node.innerHTML = node.innerHTML.replace("*", "<span style='color:red'>*</span>"); 
    } 
} 

должен работать на most browsers

+0

почему нисходящий? – gurvinder372

+0

Вы не можете использовать 'forEach' для чего-то, что не является массивом, - вы бы поняли, если бы вы проверили свой код перед его отправкой. – Andy

+0

@ Энди, что теперь? – gurvinder372