jquery - Problem with :contains selector in IE8 -
i'm working on following selector in jquery:
$("div[id^=webpartwpq]:has(table.ms-sitedirresultssort) td:contains(' : ')").closest('div')
in other words: select div id starting webpartwpq
has table class ms-sitedirresultssort
has td containing text :
. @ end of question html rendered sharepoint.
the selector works under firefox 3.5, not under internet explorer 8. i'm testing using hide()
function.
i've narrowed down td:contains(' : ')
part of selector. running $("td:contains(' : ')")
in firebug lite dumps out whole list of functions isn't valid. other selectors work fine in fb lite.
i've tried using jquery 1.3.2 , jquery 1.4rc1 without success. bug in jquery , if there ticket (i can't find one)? ideas on how best around this?
html:
<div style="" helpmode="1" helplink="/_layouts/help.aspx" allowdelete="false" class="ms-wpbody" width="100%" id="webpartwpq4" haspers="false" webpartid="2ae67b12-82db-4238-8be9-cd4b39cbd15a"> <table cellspacing="0" cellpadding="0" border="0" width="100%" xmlns:crwp="urn:schemas-microsoft-com:categoryresultswebpart" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:x="http://www.w3.org/2001/xmlschema" class="ms-sitedirresultssort"> <tbody> <tr> <td width="100%" /> <td nowrap=""> <a href="#title">sort title </a><span>| </span><a href="#url">sort url </a> </td> </tr> </tbody> </table> <table cellspacing="0" cellpadding="0" border="0" width="100%" xmlns:crwp="urn:schemas-microsoft-com:categoryresultswebpart" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:x="http://www.w3.org/2001/xmlschema" class="ms-sitedirresultspaging"> <tbody> <tr> <td> : </td> </tr> </tbody> </table> <table cellspacing="0" cellpadding="0" border="0" width="100%" xmlns:crwp="urn:schemas-microsoft-com:categoryresultswebpart" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:x="http://www.w3.org/2001/xmlschema" class="ms-sitedirresultsbody" id="table2"> <tbody> <tr> <td valign="top"> <img alt="" src="/_layouts/images/lstbulet.gif" /> </td> <td width="100%" class="ms-sitedirresultstitle"> <a href="http://site/cd10/_layouts/mysite.aspx?redirect=1">setup mysite</a> </td> </tr> <tr> <td /> <td width="100%" class="ms-sitedirresultsurl"> <a dir="ltr" href="http://site/cd10/_layouts/mysite.aspx?redirect=1">http://site/cd10/_layouts/mysite.aspx?redirect=1</a> </td> </tr> </tbody> </table> </div>
<td> : </td>
doesn't contain :
in either browser, trailing newline different space. however:
<td> : </td>
now give different results in ie , firefox. contains
doesn't match in ie, because parser has silently thrown away whitespace, ie likes do. if @ innerhtml
see:
<td>: </td>
which unsurprisingly doesn't match selector.
so careful contains
, whitespace because ie's html parser quirky ever.
personally i'd try avoid non-standard jquery selectors :has
, particularly :contains
, require jquery lot of slow work. standard css2-3 selectors, on other hand, can passed off browser's own selector engine in newer browsers selectors-api support (including ie8).
how like:
$('.ms-sitedirresultssort ~ table td').filter(function() { return this.text().match(/(^|\s):(\s|$)/); })
~
css3 selector any-following-sibling; ie8 support it.
Comments
Post a Comment