XML DOM - Range 对象

Range 对象表示文档中的连续范围。

Range 对象

Range 对象表示文档的连续范围区域,如用户在浏览器窗口中用鼠标拖动选中的区域。

如果一个实现支持 Range 模块,那么 Document 对象就定义了 createRange() 方法,调用它可创建新的 Range 对象。

ຫົວຂໍ້ໃຫ້ຫາຄວາມຫນັງ:IE 定义了不兼容的 Document.createRange() 方法,它返回的对象与 Rang 接口相似,但不兼容。

ເຄື່ອງໝູ່ Range ຈະກຳນວຍການການກັນກັບຫົວຂໍ້ 'ເລືອກ' ຂອງໂດຍສານຫົວຂໍ້ທີ່ມີຫຼາຍກົນລະຍຸດ, ນອກຈາກນັ້ນຍັງມີກົນລະຍຸດທີ່ຈະການກັບຫົວຂໍ້ໃນກອບກວ້າງທີ່ເລືອກ.

ຜົນປະກອບຂອງເຄື່ອງໝູ່ Range ຈະສະໜອງກົນລະຍຸດທີ່ຈະຮັບມາປະຕູບັງຄັບແລະການກະຕຸ້ມຂອງກອບກວ້າງ. ກົນລະຍຸດທີ່ຈະກຳນວຍການການກັນກັບກອບກວ້າງຈະສະໜອງກົນລະຍຸດທີ່ຈະການກັນກັບປະຕູບັງຄັບ. ເຫັນວ່າກອບກວ້າງຈະການກັນກັບ Document ຫຼື ເລັກອອກ DocumentFragmentຂອງຫົວຂໍ້. ເມື່ອກຳນວຍການກອບກວ້າງຂອງປະຕູບັງຄັບຂອງກອບກວ້າງຈະຖືກກຳນວຍການ, ພວກເຮົາສາມາດໃຊ້ກົນລະຍຸດ deleteContents(), extractContents(), cloneContents(), ແລະ insertNode() ເພື່ອການກະຈາຍ, ການສໍາເນົາ, ແລະ ການກະຈາຍຫົວຂໍ້.

ເມື່ອໄດ້ປ່ຽນແປງໂດຍການເພີ່ມເພີກຫຼືຫຼຸດຫຼຸດຂອງໂດຍສານຫົວຂໍ້, ບັນດາເລັກອອກຂອງກອບກວ້າງທີ່ອະທິບາຍສ່ວນບາງຂອງໂດຍສານຫົວຂໍ້ຈະປ່ຽນແປງ (ຖ້າຈະຈຳເປັນ), ເພື່ອຮັກສາປະຕູບັງຄັບຂອງພວກມັນຢູ່ເປັນທີ່ມີຜົນງານ, ແລະຮັກສາຫົວຂໍ້ທີ່ຈະສະແດງຫົວຂໍ້ຂອງໂດຍສານຫົວຂໍ້ນັ້ນໃຫ້ໃກ້ຄຽງຫຼາຍທີ່ຈະສະແດງຫົວຂໍ້ຂອງໂດຍສານຫົວຂໍ້.

ສັບພາສາ: ກອບກວ້າງ, ປະຕູບັງຄັບ, ແລະການກະຕຸ້ມ

ກອບກວ້າງມີສອງປະຕູບັງຄັບທີ່ຈະກຳນວຍການສະແດງຫົວຂໍ້ທີ່ເລີ່ມມາແລະຈົບມາຂອງກອບກວ້າງ. ປະຕູບັງຄັບແມ່ນຫົວຂໍ້ແລະການກະຕຸ້ມທີ່ຈະກຳນວຍການສະແດງຫົວຂໍ້ນັ້ນ. ຫົວຂໍ້ຈະຈະເປັນ ຫົວຂໍ້ Elementຫົວຂໍ້ Documentຫຼື ຫົວຂໍ້ Textສຳລັບຫົວຂໍ້ Element ແລະຫົວຂໍ້ Document,ການກະຕຸ້ມແມ່ນອ້າງຫົວຂໍ້ລູກຂອງຫົວຂໍ້ນັ້ນ。ການກະຕຸ້ມທີ່ 0 ສະແດງວ່າປະຕູບັງຄັບຢູ່ກ່ອນຫົວຂໍ້ລູກທໍາອິດຂອງຫົວຂໍ້ນັ້ນ。ການກະຕຸ້ມທີ່ 1 ສະແດງວ່າປະຕູບັງຄັບຢູ່ຫຼັງຫົວຂໍ້ລູກທໍາອິດຂອງຫົວຂໍ້ນັ້ນແລະກ່ອນຫົວຂໍ້ລູກທີສອງຂອງຫົວຂໍ້ນັ້ນ。ແຕ່ຖ້າປະຕູບັງຄັບແມ່ນຫົວຂໍ້ Text,ການກະຕຸ້ມຈະອ້າງຫົວຂໍ້ຂອງຈຳນວນສອງຄຳໃນຂະນະຄັດເລີຍ。

Range 对象的常量

这些常量指定了如何比较 Range 对象的边界点。

它们是 compareBoundaryPoints() 方法的 how 参数的合法值:

常量 ອະທິບາຍ
START_TO_START 用指定范围的开始点与当前范围的开始点进行比较。
START_TO_END 用指定范围的开始点与当前范围的结束点进行比较。
END_TO_END 用指定范围的结束点与当前范围的结束点进行比较。
END_TO_START 用指定范围的结束点与当前范围的开始点进行比较。

ປະສົງວິທີການ RangeDocumentFragment

ຫົວຂໍ້ໃຫ້ຫາຄວາມຫນັງ:ທຸກປະສົງແມ່ນພຽງແຕ່ອ່ານ, ບໍ່ສາມາດປ່ຽນຈຸດເລີ່ມຢູ່ ແລະ ຈຸດຢູ່ຂອງ RangeDocumentFragment ຜ່ານການປ່ຽນປະສົງ, ຕ້ອງໄດ້ເອິ້ນວິທີການ setEnd() ແລະ setStart() ເພື່ອປ່ຽນມັນ.

ຫົວຂໍ້ໃຫ້ຫາຄວາມຫນັງ:ຖ້າມີການເອິ້ນວິທີການ detach(), ການອ່ານປະສົງຂອງທຸກປະສົງຈະສາຍຕະລາຍຄຳສັ່ງ INVALID_STATE_ERR. DOMException 异常

ປະສົງ ອະທິບາຍ
collapsed ຖ້າຈຸດເລີ່ມຢູ່ ແລະ ຈຸດຢູ່ຢູ່ໃນຕອນເລິກຂອງໂດຍການສະແດງດຽວກັນໃນໂດຍການສະແດງດຽວກັນ, ຄວາມຈິງວ່າ RangeDocumentFragment ທີ່ວັດຈຳນວນຫລຸດຫລຸດ, ຫລື collapse.
commonAncestorContainer ຈຸດເລີ່ມຢູ່ ແລະ ຈຸດຢູ່ຂອງ RangeDocumentFragment (ພວກເຂົາແມ່ນຫົວຂໍ້ພັນທຸກຄວາມສົມບູນສະໜາມຂອງ Document ພັນທຸກຄວາມສົມບູນຂອງຫົວຂໍ້ພັນ).
endContainer Document ຂອງຫົວຂໍ້ທີ່ບັນຈຸມີຈຸດຢູ່.
endOffset ຕອນເບື້ອງຢູ່ endContainer.
startContainer Document ຂອງຫົວຂໍ້ທີ່ບັນຈຸມີຈຸດເລີ່ມຢູ່.
startOffset ຕອນເບື້ອງຂອງຈຸດເລີ່ມຢູ່ startContainer.

ວິທີການຂອງ RangeDocumentFragment

ຫົວຂໍ້ໃຫ້ຫາຄວາມຫນັງ:ຖ້າມີການເອິ້ນວິທີການ detach() ຂອງ Range ວິທີການໃນຫລັງຈາກນັ້ນຂອງ RangeDocumentFragment ຈະສາຍຕະລາຍຄຳສັ່ງ INVALID_STATE_ERR. DOMException 异常

ວິທີການ ອະທິບາຍ
cloneContents() ບອກມາ RangeDocumentFragment ອານຸສາວະພາບທີ່ບັນຈຸມີຄວາມຄິດຂອງຂອງ RangeDocumentFragment.
cloneRange() ສ້າງ Range ອານຸສາວະພາບອັນໂຕລະນາວະການສະແດງສະໝອງດຽວກັບ Range ອານຸສາວະພາບດຽວກັນ.
collapse() 折叠该范围,使它的边界点重合。
compareBoundaryPoints() 比较指定范围的边界点和当前范围的边界点,根据它们的顺序返回 -1、0 和 1。比较哪个边界点由它的第一个参数指定,它的值必须是前面定义的常量之一。
deleteContents() 删除当前 Range 对象表示的文档区域。
detach() 通知实现不再使用当前的范围,可以停止跟踪。如果调用了范围的这个方法,那么接下来调用的该范围任何方法都会抛出代码为 INVALID_STATE_ERR 的 DOMException 异常
extractContents() 删除当前范围表示的文档区域,并且以 DocumentFragment 对象的形式返回那个区域的内容。该方法和 cloneContents() 方法与 deleteContents() 方法的组合很相似。
insertNode() 把指定的节点插入文档范围的开始点。
selectNode() 设置该范围的边界点,使它包含指定的节点和它的所有子孙节点。
selectNodeContents() 设置该范围的边界点,使它包含指定节点的子孙节点,但不包含指定的节点本身。
setEnd() 把该范围的结束点设置为指定的节点和偏移量。
setEndAfter() 把该范围的结束点设置为紧邻指定节点的节点之后。
setEndBefore() 把该范围的结束点设置为紧邻指定节点之前。
setStart() 把该范围的开始点设置为指定的节点中的指定偏移量。
setStartAfter() 把该范围的开始点设置为紧邻指定节点的节点之后。
setStartBefore() 把该范围的开始点设置为紧邻指定节点之前。
surroundContents() 把指定的节点插入文档范围的开始点,然后重定范围中的所有节点的父节点,使它们成为新插入的节点的子孙节点。
toString() 返回该范围表示的文档区域的纯文本内容。