I'm using jQuery to created a linked TOC that appears in a dialog box. The function I wrote to do so finds all the h4
's in the page and
id
s to link to li
s title
s and href
s to the anchors so the links point to the original h4
sli
s li
s to a ol
the in dialog div
However, in IE7, the cloned h4
s are not getting turned in li
s. Works in FireFox. In IE7, everything happens as it does in FireFox, just that the the .replaceWith()
is seemingly ignore... why?
Looks like this:
$('#content h4').each(function(index) {
index = index + 1;
$(this)
.attr('id', 'tutorial_' + index)
.before(function() {
return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
})
.clone()
.replaceWith("<li>" + $(this).text() + "</li>")
.wrapInner("<a></a>")
.find('a')
.click(function(){
$("#dialog").dialog("close");
})
.attr({
'title': 'jump to ' + $(this).text(),
'href': '#tutorial_' + index
})
.end()
.appendTo('#dialog ol')
});
In action at: http://f1shw1ck.com/jquery_sandbox/tutorials.html
I don't really understand why people love so much cloning... :)
I would do something like
$('#content h4').each(function(index) {
index = index + 1;
$(this)
.attr('id', 'tutorial_' + index)
.before(function() {
return '<div class="how_to">HOW TO<div><span>' + index + '</span></div></div>';
})
.clone()
.html("<li>" + $(this).text() + "</li>")
.wrapInner("<a></a>")
.find('a')
.click(function(){
$("#dialog").dialog("close");
})
.attr({
'title': 'jump to ' + $(this).text(),
'href': '#tutorial_' + index
})
.end()
.appendTo('#dialog ol')
});
But that's just me :)
EDIT: After reading "a lot" about replaceWith() - there seems to be unresolved bug with IE7 & IE6 since... forever. So I discarded my function, took yours and replaced replaceWith
with html
- which works in this case the way you want, i.e. replace item's html and return itself.
As for replaceWith, you probably ran into one of web vs. IE7 bugs ;)