है कि मैं इस तरह एक HTML संरचना है:'contenteditable' div में सेट कैरट स्थिति बच्चों
// Move caret to a specific point in a DOM element
function SetCaretPosition(object, pos)
{
// Get key data
var el = object.get(0); // Strip inner object from jQuery object
var range = document.createRange();
var sel = window.getSelection();
// Set the range of the DOM element
range.setStart(el.childNodes[0], pos);
range.collapse(true);
// Set the selection point
sel.removeAllRanges();
sel.addRange(range);
}
इस कोड को पूरी तरह से ठीक काम करता है जब तक मैं div जैसे को (span, b, i, u, strike, sup, sub)
चाइल्ड टैग जोड़ना शुरू
<div contenteditable="true">
This is some <span class="fancy">plain</span>, boring content.
</div>
चीजें अधिक जटिल हो जाती हैं जब ये बच्चे टैग अपने बच्चों के टैग के साथ समाप्त होते हैं उदा।
<div contenteditable="true">
This is some <span class="fancy"><i>plain</i></span>, boring content.
</div>
अनिवार्य रूप से, क्या होता है, कि setStart
फेंकता एक IndexSizeError
जब मैं एक सूचकांक एक बच्चे टैग की शुरुआत की तुलना में अधिक के लिए SetCaretPosition
करने की कोशिश है। setStart
केवल तब तक काम करता है जब तक कि यह पहले बाल टैग तक नहीं पहुंच जाता।
मुझे क्या चाहिए, SetCaretPosition
फ़ंक्शन के लिए इन बच्चों के टैग की अज्ञात संख्या (और संभावित रूप से अज्ञात बाल टैग की अज्ञात संख्या) को संभालने के लिए है ताकि स्थिति को उसी तरह से काम किया जा सके, अगर कोई टैग न हो ।
तो दोनों इस बात के लिए:
<div contenteditable="true">This is some plain, boring content.</div>
और इस:
<div contenteditable="true">
This is <u>some</u> <span class="fancy"><i>plain</i></span>, boring content.
</div>
SetCaretPosition(div, 20);
'उबाऊ' में 'बी' से पहले कैरट कर देगी।
मुझे आवश्यक कोड क्या है? बहुत धन्यवाद!
धन्यवाद! मैंने अपने स्वयं के एक समारोह को लिखना समाप्त कर दिया जो jQuery ऑब्जेक्ट को संरक्षित करता है और दोबारा बच्चों की खोज करता है, लेकिन यह भी उपयोगी है! – John1984