Anonymous
Почему эти две строки не равны, если они имеют одинаковое содержимое? [закрыто]
Сообщение
Anonymous » 12 ноя 2025, 23:46
Эта функция предназначена для хранения действий, чтобы я мог позже их отменить
Код: Выделить всё
function actionManager(element, newData, oldData, type) {
let newAction = {};
if (type === 'text-change') {
const selectedText = selectedTextBeforeCursor(element);
const elementActions = undoList.filter(undo => undo.element === element);
const previousAction = elementActions[elementActions.length - 1];
const targetText = `${tempArray[tempArray.length - 1]?.selectedText} `;
if (elementActions.length) {
if (selectedText === targetText) {
previousAction.newData = tempArray[tempArray.length - 1]?.newData;
tempArray = [];
} else {
console.log(selectedText);
console.log(targetText);
tempArray.push({ newData, selectedText });
previousAction.newData = newData;
redoList = [];
return;
}
}
newAction = {
newData,
oldData,
type,
element
};
} else if (type === 'element-change') {
newAction = {
newData,
oldData,
type,
element
};
}
undoList.push(newAction);
redoList = [];
}
function selectedTextBeforeCursor(element) {
const selection = window.getSelection();
if (!selection.rangeCount) return '';
const range = selection.getRangeAt(0);
const preCaretRange = range.cloneRange();
preCaretRange.selectNodeContents(element);
preCaretRange.setEnd(range.endContainer, range.endOffset);
return preCaretRange.toString();
}
В моем коде if (selectedText === targetText) в функции actionManager() показывает false, даже если в console.log обе строки отображают одинаковое содержимое. Обе строки не равны? Я хочу, чтобы newAction создавался только при обнаружении места.
Подробнее здесь:
https://stackoverflow.com/questions/798 ... me-content
1762980391
Anonymous
Эта функция предназначена для хранения действий, чтобы я мог позже их отменить [code]function actionManager(element, newData, oldData, type) { let newAction = {}; if (type === 'text-change') { const selectedText = selectedTextBeforeCursor(element); const elementActions = undoList.filter(undo => undo.element === element); const previousAction = elementActions[elementActions.length - 1]; const targetText = `${tempArray[tempArray.length - 1]?.selectedText} `; if (elementActions.length) { if (selectedText === targetText) { previousAction.newData = tempArray[tempArray.length - 1]?.newData; tempArray = []; } else { console.log(selectedText); console.log(targetText); tempArray.push({ newData, selectedText }); previousAction.newData = newData; redoList = []; return; } } newAction = { newData, oldData, type, element }; } else if (type === 'element-change') { newAction = { newData, oldData, type, element }; } undoList.push(newAction); redoList = []; } function selectedTextBeforeCursor(element) { const selection = window.getSelection(); if (!selection.rangeCount) return ''; const range = selection.getRangeAt(0); const preCaretRange = range.cloneRange(); preCaretRange.selectNodeContents(element); preCaretRange.setEnd(range.endContainer, range.endOffset); return preCaretRange.toString(); } [/code] В моем коде if (selectedText === targetText) в функции actionManager() показывает false, даже если в console.log обе строки отображают одинаковое содержимое. Обе строки не равны? Я хочу, чтобы newAction создавался только при обнаружении места. Подробнее здесь: [url]https://stackoverflow.com/questions/79818235/why-arent-these-two-strings-equal-when-they-have-the-same-content[/url]