2009-12-28 2 views
1

This answer было почти точно, что мне нужно.jQuery заменить все экземпляры символа в узле - работа с точкой

После добавления этого Ф.Н., встроенный в верхней части моего JQ кода, я написал это JQ пониже:

$(":contains(|)").each(function() { 
    replaceText('|', 'X'); 
}); 

Это работает, находя все символы труб по всему документу и заменить их X.

Однако я хотел заменить все символы труб в отдельном div, а не на весь документ. Таким образом, я изменил на:

$("#mySpecificDiv:contains(|)").each(function() { 
    replaceText('|', 'X'); 
}); 

Однако это все еще заменяет все экземпляры документа. Я уверен, что я должен использовать третий вариант «узел» (см. Ссылку на ответ), чтобы ограничить область действия, но я попытался и не смог найти правильный синтаксис.

Извините, что еще раз, прочитав книги и пробную версию, а также прошлый опыт, я продолжал препятствовать моим попыткам освоить еще одно глупое простое упражнение для jQ и заранее заблаговременно, если у вас есть время, чтобы показать мне, что я делаю неправильно.

Cheers, -Alan

ответ

0

Используйте это:

$(':contains(|)', $('#mySpecificDiv')).each(function() { 
    replaceText ('|', 'X', this); 
}); 

$() может принимать два аргумента. Первый - это селектор, а второй может быть элементом, которым вы ограничиваете поиск (поиск основан на селекторе).

+0

Спасибо, я использовал это «как часть моего решения». – Alan

1

попробовать это:

replaceText('|', 'X', document.getElementById("mySpecificDiv"));  

, но с использованием замены текста функции в его нынешнем виде будет заменить только первый матч. Вам нужно изменить его на регулярное выражение, чтобы заменить все события в div.

Используйте это, чтобы заменить все совпадения в тексте:

replaceText(/\|/ig, 'X', document.getElementById("mySpecificDiv")); 
+0

Спасибо, я использовал регулярное выражение как часть решения и объединил его с «этим» из ответа alt ниже. – Alan

+0

Да, если есть несколько элементов, которым нужны манипуляции, тогда $ .each - лучшее решение. – TheVillageIdiot

0

Да. Вам нужно указать узел или использовать элемент body. Измените его на:

$("#mySpecificDiv:contains(|)").each(function() { 
    replaceText('|', 'X', this); 
}); 

this является ссылкой на текущий узел итерируемого над в каждой функции.

+0

Спасибо, я использовал ваше использование «этого» для части решения. – Alan

0

Чтобы ограничить область действия определенным элементом.

$('*:contains("|")', '#scopeElement') 
+0

Спасибо за ваш комментарий. – Alan

0

В конце концов, я думаю, что решение ниже, что работает отлично, представляет собой гибрид некоторых ответов (мои извинения, если ваш ответ, что у меня есть, и я только что был настолько глуп, что я Бесполезным не понимаю ...).

Следующий находит определенный div и затем рекурсивно заменяет каждый экземпляр символа канала, найденный с использованием регулярного выражения, с альтернативной текстовой строкой «X» в этом случае.

$("#mySpecificDiv:contains(|)").each(function() { 
    replaceText(/\|/ig, 'X', this); 
}); 

Brilliant, я бы здесь не без ваших ответов - много спасибо всем, кто прокомментировал.

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