Description

The ui-tabs plugin is hard coded to assume that the <ul> list is a
child of the current element.

The code in question is in the _tabify method:

_tabify: function(init) {

this.list = this.element.children('ul:first');
...

}

This limits the markup to have to match >UL:first. Use any other markup and the tabs plugin will fail to locate the <ul>
list.

I changed the code to use find() instead of children() and added an
option to the defaults as follows:
(Note the use of ">" in the selector to ensure find() continues to
work the way children() does currently by default)

_tabify: function(init) {

this.list = this.element.find(this.options.listSelector);
...

}

defaults: {

...

listSelector: '>ul:first'

}

Now, when we initialise the tabs plugin, we can specify listSelector:
'>DIV>ul:first' to handle my non-standard markup.