javascript - How can I use Greasemonkey to reorganize a <ul> list? -
i tried adapt someone's script stack overflow post, did wrong. i've got no experience javascript or jquery, so... please help?
the target-page html looks this:
<div class="container7"> <div class="userdata"> <h4></h4> <ul id="userinfo" class="set textsize"> <li class="name"></li> <li class="joindate"></li> <li class="title"></li> <li class="custom"></li> <li class="description"></li> </ul> </div> </div> i want modify this:
<div class="container7"> <div class="userdata"> <h4></h4> <ul id="userinfo" class="set textsize"> <li class="joindate"></li> <li class="name"></li> <li class="custom"></li> <li class="description"></li> <li class="title"></li> </ul> </div> </div>
tried this:
// ==userscript== // @name reorganize li // @namespace blah // @description reorganize li // @include https://www.thewebsite.com/* // @version 1 // @grant none // ==/userscript== var container = document.queryselector (".userdata"); var firsttargdiv = container.queryselector (".userdata > li.name:first-child"); var lasttargdiv = container.queryselector (".userdata > li.joindate:last-child"); //-- swap last first. container.insertbefore (lasttargdiv, firsttargdiv); //-- move old first last. container.appendchild (firsttargdiv); as start -- flipping first two. didn't work. wasn't sure had done wrong. i've tried testing different queryselector values, nothing seems work.
that code work (sort of) except css selectors, passed queryselector, off. html gave, should be:
var container = document .queryselector ("div.userdata > ul"); var firsttargdiv = container.queryselector ("li.name"); var lasttargdiv = container.queryselector ("li.joindate"); also, <li>s not have ended quite wanted.
to sort uniform collection of nodes append them container in order want them. appending existing nodes moves nodes.
if list of nodes (the <li>s in case) each have unique identifier or contained text, use array define arbitrary sort order.
in case, each <li> has unique css class we'll define sort order so:
var classorder = ["joindate", "name", "custom", "description", "title"]; we can use array snag each <li> class , append in desired order.
using jquery, complete userscript become:
// ==userscript== // @name reorganize li // @include https://www.thewebsite.com/* // @require http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js // @grant gm_addstyle // ==/userscript== /*- @grant gm_addstyle directive needed work around design change introduced in gm 1.0. restores sandbox. */ var classorder = ["joindate", "name", "custom", "description", "title"]; var containernd = $("div.userdata > ul"); (var j = 0, l = classorder.length; j < l; j++) { var targetnode = containernd.find ('li.' + classorder[j]); containernd.append (targetnode); }
Comments
Post a Comment