2010-03-17 13 views
9

क्या किसी को सामग्री में किसी लिंक को संपादित करने के बारे में कोई सुझाव है। संपादन योग्य div? यह लिंक आदर्श होगा जब लिंक या तो माउस के साथ क्लिक किया जाता है, या कर्सर लिंक हिट करता है, कि एक छोटा सा संकेत पॉप अप होगा और उपयोगकर्ता को लिंक की href प्रॉपर्टी को बदलने की अनुमति देगा। प्रॉम्प्ट मुद्दा नहीं है, लेकिन लिंक का पता लगाना संभव है या तो क्लिक किया गया है या कर्सर लिंक पर पहुंचा है? ऑनफोकस किसी सामग्री में काम नहीं कर रहा है फ़ायरफ़ॉक्स पर उचित div & सफारी। कोई विचार?किसी सामग्री के भीतर एक लिंक को संपादित करने के लिए कैसे करें योग्य div

उत्तर

15

मुझे यकीन है कि यह वही है जो आप खोज रहे थे, हालांकि मैंने कल्पना को थोड़ा सा मजाक बनाने के लिए jQuery का उपयोग किया था। jsbin पूर्वावलोकन उपलब्ध है, तो इसे देखो पर जाएं। अगर कोई जवाब के लिए इसे शुद्ध जेएस में परिवर्तित करने में सक्षम है, तो मैंने इसे एक समुदाय विकी बना दिया है।

यह KeyUp से जुड़ कर काम करता है/संपादन योग्य div पर घटनाओं क्लिक करें, फिर नोड है कि उपयोगकर्ताओं को कैरट उन आईई लोगों के लिए मानकों के लिए window.getSelection(), या document.selection का उपयोग करने में रखा जा रहा है के लिए जाँच। बाकी कोड संपादन को पॉपिंग/हैंडलिंग संभालता है।

jQuery तरीके:

function getSelectionStartNode(){ 
    var node,selection; 
    if (window.getSelection) { // FF3.6, Safari4, Chrome5 (DOM Standards) 
    selection = getSelection(); 
    node = selection.anchorNode; 
    } 
    if (!node && document.selection) { // IE 
    selection = document.selection 
    var range = selection.getRangeAt ? selection.getRangeAt(0) : selection.createRange(); 
    node = range.commonAncestorContainer ? range.commonAncestorContainer : 
      range.parentElement ? range.parentElement() : range.item(0); 
    } 
    if (node) { 
    return (node.nodeName == "#text" ? node.parentNode : node); 
    } 
} 

$(function() { 
    $("#editLink").hide(); 
    $("#myEditable").bind('keyup click', function(e) { 
     var $node = $(getSelectionStartNode()); 
     if ($node.is('a')) { 
      $("#editLink").css({ 
      top: $node.offset().top - $('#editLink').height() - 5, 
      left: $node.offset().left 
      }).show().data('node', $node); 
      $("#linktext").val($node.text()); 
      $("#linkhref").val($node.attr('href')); 
      $("#linkpreview").attr('href', $node.attr('href')); 
     } else { 
      $("#editLink").hide(); 
     } 
    }); 
    $("#linktext").bind('keyup change', function() { 
     var $node = $("#editLink").data('node'); 
     $node.text($(this).val()); 
    }); 
    $("#linkhref").bind('keyup change', function() { 
     var $node = $("#editLink").data('node'); 
     $node.attr('href', $(this).val()); 
     $node.and('#linkpreview').attr('href',$(this).val()); 
    }); 
}); 
+0

बहुत शांत, बहुत बहुत शुक्रिया !!! –

संबंधित मुद्दे