Заменить строку - Как заменить каждое слово один раз - PullRequest
3 голосов
/ 15 июня 2011

У меня есть словарь xml, как показано ниже.

<word definition="The primary income-earner in a household"&gtbread winner&lt/word&gt
<word definition="One who wins, or gains by success in competition, contest, or gaming"&gtwinner&lt/word&gt

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

var allwords = xmlDoc.getElementsByTagName("word");
for (var i=0; i<allwords.length; i++)
    {
            var name = allwords[i].lastChild.nodeValue;

            var linked = '<a href ="#" title="' +  allwords[i].lastChild.nodeValue + ': ' + allwords[i].getAttribute("definition") + '">' + allwords[i].lastChild.nodeValue + '</a>'; 
    }

Вот мой заменитель

function replacer(oldstring, newstring) {
document.body.innerHTML = document.body.innerHTML.replace(oldstring, newstring);
}

Но проблема в том, один раз победитель хлеба изменяется на связанную форму, также победитель изменяется с победитель хлеба включает победитель , победитель изменяется дважды, и все коды смешиваются вверх.

Я спрашиваю, есть ли способ, однажды Хлебный победитель Изменения Победитель больше не должен меняться.

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 15 июня 2011

Что-то вроде этого:

for (var i=0; i<allwords.length; i++)
{
    if(allwords[i].firstChild.name == 'a') {
        // This word has been linked already, skip it
    }

    // your code
}
0 голосов
/ 15 июня 2011

Вам нужно будет перебирать подходящие текстовые узлы и заменять только те, которые не имеют тега A в качестве предка в DOM.

0 голосов
/ 15 июня 2011

Вам нужен какой-нибудь сторож, чтобы предотвратить обработку уже обработанного термина.Я бы порекомендовал обернуть замененные термины другим элементом (неясно, как устроен ваш html, поэтому я не уверен, что будет работать здесь, но span будет самым простым способом в обычном html).Тогда ваша логика просто пропустит замену слов, у которых есть родительский элемент, который вы решили обернуть.

0 голосов
/ 15 июня 2011

Попробуйте функцию strtr ($ text, $ fromList, $ toList).Каждый термин следует заменить один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...