Saw this post about getting the html from the selected/higlighted text. And it does work in getting the html.
function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}
alert(getSelectionHtml());
But, suppose there's this html:
<p>I am <span style="color:green;">green</span> and I have <span style="background-color:yellow;">yellow background<span>.</p>
Now if the word green is highlighted, then it will just get the word
"green"
even if there's <span> tag surrounded. But if selected more character than the word green (say the space before or after the word green like this " green"), it will get the html  tag too, such as:
<span style="color:green;">green</span>
Is it possible to get the html even if only the word "green" is highlighted?
Eventually what I want to achieve is suppose I want to change the color of the highlighted text to blue color, then first check if the highlighted text has a span. Secondly whether that span has color or background or even both styling. And lastly do the changes to the highlighted text.
$('#change_blue').on("click", function() {
  var sel = getSelectionHtml();
  /*var span = sel.find("<span").html();*/
  alert(sel);
  if (sel.match("<span style=")) {
   console.log('has span tag');
    if (sel.indexOf("background") > -1 && sel.indexOf("color") > -1 ) {
      console.log('has both background and color')
      // change color to blue
    }
    else if (sel.match("color")) {
      console.log('only color')
      // change color to blue
    }
    else {
      console.log('only background')
      // add blue color
    }
  }
  else {
    console.log('no span tag');
  }
});
How can I get the html of a highlighted text and change it accordingly? It would really mean a lot if you could help me through. Thank you.
 
     
    