CenterOnPhrase
HTML
<div class="jsCenterOnPhrase">The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the
<div class="jsCenteredPhrase">lazy dog.</div>The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.</div>
CSS
.jsLeftWrap {
display: block;
text-align: center;
}
.jsCenterWrap {
display: inline-block;
text-align: center;
}
.jsCenterPrefix {
display: inline-block;
background-color: red;
}
.jsCenterPhrase {
display: inline-block;
background-color: green;
}
.jsCenterSuffix {
display: inline-block;
background-color: blue;
}
.jsRightWrap {
display: block;
text-align: center;
}
JavaScript
var $divParents = $('.jsCenterOnPhrase'); // all instances
var sMarker = '##'; // marker for phrase position
// for each instance
$divParents.each(function () {
// closures
var $parent = $(this);
var $phrase = $parent.find('div.jsCenteredPhrase');
// if there is only one phrase
if ($phrase.size() == 1) {
// more closures
var iParentWidth = $parent.innerWidth();
var sPhrase = $phrase.text();
var iPhraseWidth = $phrase.outerWidth();
$phrase.replaceWith(sMarker);
var sFullText = $parent.text().replace(/\s+/g, ' ');
// add html structure to container
$parent.html(
'<span class="jsLeftWrap"></span>' +
'<span class="jsCenterWrap">' +
'<span class="jsCenterPrefix"></span>' +
'<span class="jsCenterPhrase"></span>' +
'<span class="jsCenterSuffix"></span>' +
'</span>' +
'<span class="jsRightWrap"></span>');
// more closures
var $LeftWrap = $parent.find('.jsLeftWrap');
var $CenterWrap = $parent.find('.jsCenterWrap');
var $CenterPrefix = $parent.find('.jsCenterPrefix');
var $CenterPhrase = $parent.find('.jsCenterPhrase');
var $CenterSuffix = $parent.find('.jsCenterSuffix');
var $RightWrap = $parent.find('.jsRightWrap');
// get all the words left and right into arrays
var iLeftStart = 0;
var iLeftEnd = sFullText.indexOf(sMarker);
var iRightStart = iLeftEnd + sMarker.length;
var iRightEnd = sFullText.length - 1;
var sFullLeft = sFullText.substring(iLeftStart, iLeftEnd);
var sFullRight = sFullText.substring(iRightStart, iRightEnd);
var aFullLeft = sFullLeft.split(' ');
var aFullRight = sFullRight.split(' ');
// build out each word as a node
for (var i = 0; i < aFullLeft.length; i++) {
var sVal = aFullLeft[i];
if (sVal != '') {
...