Я хотел бы изменить текст в документе в виде даты и заменить его ссылкой, чтобы добавить событие с этой датой в Календарь Google.У меня в основном это работает с одним предупреждением, он пытается добавить ссылку внутри уже существующих ссылок, в которых есть даты.
document.body.innerHTML = document.body.innerHTML.replace(arrayDates[i], arrayDates[i] + " <a href=\"http://www.google.com/calendar/event?action=TEMPLATE&text=someevent&dates=" + dateString + "&details=&location=&trp=false&sprop=&sprop= target=\"_blank\"> <img src=\"" + chrome.extension.getURL("Config-date-16.png") + "\" title=\"Add this event to your Google Calendar\"> </a> ");
Я думал о том, чтобы просто выполнить замену в строке innerHTML всех тегов pэлементы: например,
arrayP = document.body.getElementsByTagName("p");
for(i=0;i<arrayP.length:i++) {
arrayP[i].innerHTML = arrayP[i].innerHTML.replace(arrayDates[i], arrayDates[i] + " <a href=\"http://www.google.com/calendar/event?action=TEMPLATE&text=someevent&dates=" + dateString + "&details=&location=&trp=false&sprop=&sprop= target=\"_blank\"> <img src=\"" + chrome.extension.getURL("Config-date-16.png") + "\" title=\"Add this event to your Google Calendar\"> </a> ");
}
, но это также относится и к дочерним элементам (например, связывает тег).Я не уверен, каким образом я могу заменить только innerHTML для элементов тега p без его дочерних элементов.
Кроме удаления всех элементов с тегом (он также будет искажать изображения и тому подобное, поэтому я должен сделатьто же самое с этими элементами), запуском замены и повторной вставкой элементов тега, я не могу придумать другого пути решения проблемы искажения уже существующих ссылок (идеи приветствуются).
К сожалению, у меня тоже проблемы сэтот.Я мог бы использовать регулярное выражение для сопоставления всех элементов в строке innerHTML, но я думаю, что было бы менее полезно использовать DOM.
Я пробовал следующее, но я не уверен, как обойти проблемуне зная, к какому дочернему элементу tobeReplacedNodes [i] принадлежит: ( edit: я мог бы, вероятно, вызвать .parent или что-нибудь подобное, чтобы выяснить, что это за родительский объект ... Я попробую это снова и сообщу, как это происходит )
tobeReplacedNodes = document.body.getElementsByTagName("a");
for(i=0;i<tobeReplacedNodes.length;i++) {
tobeReplacedNodes[i] = document.body.replaceChild(element, tobeReplacedNodes[i]);
}
То, что у меня пока есть, есть здесь: http://code.google.com/p/calendar-event-adder/ (ветка тестирования наиболее актуальна)
Любые идеи / предложения приветствуются, спасибо!