这段代码用于将选区中的文本转换为指定类型的标题,并保留其原有的样式(加粗、颜色、斜体等)。但是该方法使用了已经被弃用的`document.queryCommandState()`和`document.queryCommandValue()`方法,不再建议使用。
如果您需要实现类似的功能,可以使用`Selection`和`Range` API来手动处理选区和范围。以下是一个示例函数,它可以将当前选区中的所有文本设置为指定类型的标题,并保留其原有的样式:
```
function setHeader(headerType) {
const selection = window.getSelection();
if (selection.rangeCount > 0) {
const range = selection.getRangeAt(0);
const header = document.createElement(headerType);
header.innerHTML = range.toString();
// Preserve original styles
const firstNode = range.startContainer.childNodes[range.startOffset];
if (firstNode && firstNode.nodeType === Node.TEXT_NODE) {
const computedStyle = window.getComputedStyle(firstNode.parentElement);
header.style.fontWeight = computedStyle.fontWeight;
header.style.color = computedStyle.color;
header.style.fontStyle = computedStyle.fontStyle;
}
range.deleteContents();
range.insertNode(header);
selection.removeAllRanges();
selection.addRange(range);
}
}
```
在这个示例中,我们首先获取当前选区的范围。然后,我们创建一个新的标题元素,并将选区中的文本添加到其中。接下来,我们通过`window.getComputedStyle()`方法获取选区中第一个节点的计算样式,并将其应用到新创建的标题元素中。最后,我们使用`range.deleteContents()`和`range.insertNode()`方法将新创建的标题元素插入到选区中,并重新设置选区。
请注意,这只是一个简单的示例,您可以根据自己的需求进行修改和扩展。