The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
Javascript : appendChild
What's the best way to add an <li> with a nested <a> tag to an exisiting <ul>?
More simply, I want to create a structure like this : <li><a href='something'>Click</a></li> from the ground up, and insert it into the ul DOM When I use my method, it works in opera, but not in safari or firefox, however it does not produce any javascript errors, it just doesn't work! Sample code [I've tried several ways...here's one] Code:
var newli = document.createElement('li'); var aHref = document.createElement('a'); aHref.href = 'www.google.com'; var text = document.createTextNode('hello' ); newli.appendChild(aHref); var child = parent_node.firstChild; parent_node.insertBefore(newli, child); parent_node.firstChild.firstChild.appendChild(text); This 'works' as in it inserts a node, but it isn't linked as it should be. I've also tried aHref.setAttribute('href', '#6') ... but doesn't seem to work either. |
#2
|
|||
|
|||
Remember, that to correctly nest lists, child OLs or ULs should be children of an LI element,
not direct descendents of their parent OL/UL. The text used to expand the branch should be written between the <li> tag and the <UL/OL/A> tag, and should only contain HTML that is permitted inside an 'A' element. Note; Opera 7 will lose any style attributes you define in this text - use classes instead. Code:
<ul id="someID"> <li>Book 1 <ul> <li><a href="someHref">Chapter 1</a></li> <li><a href="someHref">Chapter 2</a></li> </ul> </li> <li><a href="elsewhere.html">Book 2</a> <ul> <li><a href="someHref">Chapter 1</a></li> <li><a href="someHref">Chapter 2</a></li> </ul> </li> <li>Book 3 <ul> <li><a href="someHref">Chapter 1</a></li> <li>Cha<span class="doMore">pt</span>er 2 <ul> <li><a href="someHref">Sub 1</a></li> <li><a href="someHref">Sub 2</a></li> </ul> </li> </ul> </li> </ul> A node is the representation of either a piece of text or a tag and its attributes in the DOM. The syntax for creating a node is very simple - you just call a method of the document object. To create a text node, we use the createTextNode() method of the document object. document.createTextNode(Text) returns a node with the given text in it. Here is an example use of it: Code:
var txtNode = document.createTextNode("Hello. This is a new node."); Code:
var link = document.createElement('a'); link.setAttribute('href', 'mypage.htm'); Code:
link.setAttribute('name', 'myanchor'); Does that help?? |
#3
|
|||
|
|||
I figured it out, sort of. Thanks a lot for the detailed response.
Since the page is xhtml+voice, which was encoded as xml at the time there was some weird behavior. Mainly document.style attributes don't work from inside the xml and causes a javascript error (only in FF), also if you setAttribute('class', something) and then append it into a parent node, the class is removed -- the class has to be set by selecting the child after the append. There could be many other things I've done wrong...it's very hard to validate a x+v page since there aren't any validators for this content yet (and surely won't come close to validating as xml, xhtml, or html). |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|