You can use Array#reduce to create a string of the outerHTML of the matched elements, either using get to get a true array from the jQuery object:
var html = a.get().reduce(function(html, element) {
  return html + element.outerHTML;
}, "");
...or by using reduce on the jQuery object:
var html = Array.prototype.reduce.call(a, function(html, element) {
  return html + element.outerHTML;
}, "");
Example of the first:
$(document).on('click', '.spant', function () {
    var a = $(this).prevAll('.spant').addBack();
    var html = a.get().reduce(function(html, element) {
      return html + element.outerHTML;
    }, "");
    console.log(html);
    //localStorage.setItem('path', html);
});
<span class='spant'>sky</span>
<span class='spant'>sea</span>
<span class='spant'>earth</span>
<span class='spant'>moon</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
 
 
Or if you don't want to use reduce, a boring old loop:
var html = ""
a.each(function() {
  html += this.outerHTML;
});
Example:
$(document).on('click', '.spant', function () {
    var a = $(this).prevAll('.spant').addBack();
    var html = ""
    a.each(function() {
      html += this.outerHTML;
    });
    console.log(html);
    //localStorage.setItem('path', html);
});
<span class='spant'>sky</span>
<span class='spant'>sea</span>
<span class='spant'>earth</span>
<span class='spant'>moon</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
 
 
...which I can't help but notice is both shorter and easier to understand. ;-)