I end up with that ugly solution :
var helperDiv = document.createElement('div');
helperDiv.appendChild(fragment)
var innerHTML = helperDiv.innerHTML.replace(someRegExp,()=>values())
helperDiv.innerHTML = innerHTML;
var len = helperDiv.children.length;
while(len--){
fragment.appendChild( helperDiv.firstChild );
}
So I appreciated a better way
2017 some update
I come with better solution with Range
.
function fragmentInnerHTML(fragment, callback){
var range = new Range();
var helperDiv = document.createElement('div');
helperDiv.appendChild(fragment);
helperDiv.innerHTML = callback( helperDiv.innerHTML)
range.selectNodeContents(helperDiv);
fragment.append( range.extractContents() );
range.detach();
}
fragmentInnerHTML( fr, html => html.replace(/test(\d)/g,'test-$1') );
can be edited to be even fewer lines if needed
demo: https://jsfiddle.net/vtssq8jz/26/