попробуйте это:
const loadDataEpic = (action$, state$) =>
action$.pipe(
ofType('FETCH_DATA_SUCCESS'),
mergeMap(action => {
const isPivot = action.context === 'pivot';
return of(
{ type: 'RESET_IMAGE_DATA' },
{ type: 'INITIALISE_FILTERS' },
...(isPivot ? [{ type: 'SET_PIVOT' }] : [])
);
})
);
он добавит действие SET_PIVOT
, только если условие выполнено.
с .: Если вам не нравится синтаксис, вы можете использовать массив и выдвинуть его в зависимости от условия, а затем вернуть его с помощью of(...actions)
Отвечать на Ваш основной вопрос: document.getElementById
действительно работает с динамично добавленными элементами.
В Вашем примере кода Вы создаете openMonth отделение и устанавливаете его innerHTML. Затем в удалить теге Вы делаете это:
var month = openMonth.getElementsByTagName("span")[0].innerHTML;
openMonth.getElementsByTagName("span")
не будет существовать и получит ошибку, потому что нет никаких элементов промежутка. Я не знаю, является ли это ошибкой в коде или если это - просто неполный образец в сообщении.
Другая идея - Вы снова используете 'openMonth' идентификатор для различных элементов, возможно, это - проблема, даже если Вы удаляете предыдущий элемент сначала.
Вы могли попытаться использовать класс вместо идентификатора, или Вы могли, держа глобальную переменную с 'текущим элементом месяца'.
Необходимо согласиться с:
openMonth.id = "openMonth";
getElementById()
может только работать, если элемент является частью DOM, но так как Вы уже используете insertBefore()
это - просто примечание стороны.
Существует общий источник беспорядка, включенного здесь: названный "идентификатор" атрибута является не обязательно тем, который определяется как идентификатор элемента в базовом DTD. В декларативном HTML они связаны автоматически. Когда Вы используете setAttribute()
, Вы больше, чем не создаете атрибут, названный "идентификатором". Сам идентификатор элемента доступен через .id
свойство.
Править
Следующие работы для меня:
function test()
{
// create element, set ID
var p = document.createElement("P");
p.innerHTML = "Look ma, this is a new paragraph!";
p.id = "newParagraph";
// make element part of the DOM
document.getElementsByTagName("BODY")[0].appendChild(p);
// get element by ID
var test = document.getElementById("newParagraph");
alert(test.innerHTML);
}