قم بإزالة جميع سمات المعرف من العقد في مجموعة من الأجزاء

StackOverflow https://stackoverflow.com/questions/2690122

سؤال

هل هناك طريقة لإزالة سمة المعرف لكل عقدة في نطاق أو جزء؟

تحديث: اكتشفت أخيرًا أن الخطأ الذي أعاني منه يعتمد على <[script]> يتم تضمينه في نطاق ، وبالتالي استنساخ بشكل غير متوقع ، عندما يقوم مستخدم Chrome Ctrl+A. هدفي هو إزالة أي مثيل من <[script]> من النطاق (أو جزء المستند) ، بحيث لا يتم تكراره عند استنساخ.

هل كانت مفيدة؟

المحلول

قد تكون قادرًا على استخدام Treewalker ، والذي يعمل في جميع المجرات التي تعمل فيها النطاق.

function actOnElementsInRange(range, func) {
    function isContainedInRange(el, range) {
        var elRange = range.cloneRange();
        elRange.selectNode(el);
        return range.compareBoundaryPoints(Range.START_TO_START, elRange) <= 0
                && range.compareBoundaryPoints(Range.END_TO_END, elRange) >= 0;
    }

    var rangeStartElement = range.startContainer;
    if (rangeStartElement.nodeType == 3) {
        rangeStartElement = rangeStartElement.parentNode;
    }

    var rangeEndElement = range.endContainer;
    if (rangeEndElement.nodeType == 3) {
        rangeEndElement = rangeEndElement.parentNode;
    }

    var isInRange = function(el) {
        return (el === rangeStartElement || el === rangeEndElement ||
                    isContainedInRange(el, range))
            ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
    };

    var container = range.commonAncestorContainer;
    if (container.nodeType != 1) {
        container = container.parentNode;
    }

    var walker = document.createTreeWalker(document,
        NodeFilter.SHOW_ELEMENT, isInRange, false);

    while (walker.nextNode()) {
        func(walker.currentNode);
    }
}

actOnElementsInRange(range, function(el) {
    el.removeAttribute("id");
});

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top