Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Hallo allen,

Waarschijnlijk een klein / snel vraagje. Ik heb een stukje Javascript die een CSS class 'empty' toe moet voegen aan een div als een daarbij horende div 'leeg' is. Deze werkt goed onder Firefox en dergelijke (natuurlijk), echter onder IE (alle versies) werkt deze niet goed. Zit er een verschil tussen de regex of iets dergelijks van IE en De Andere Browsers? Een Google zoektocht levert weinig op - daar de meesten aannemen dat je div helemaal leeg is (dwz geen innerHtml), echter die van mij heeft wel inhoud in de vorm van een legend (en ja, deze moet er wel inblijven).

Ik ben helaas niet echt thuis in regex, dus nakijken of deze klopt lukt me niet zo goed. Maar aangezien dit goed in de alternatieve browsers werkt, lijkt het alsof dit een IE issue is.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function detectEmptyTabContent() {
    $(tabElement).find('.tabs-content>ul>li>fieldset').each(function(){
        // get tab content without legend
        var tabContent = $(this).html().replace(/<legend>.+<\/legend>/, '');
        // when it contains nothing...
        if (tabContent.match(/^\s*$/)) {
            // get tab index
            var position = ($(this).parent().attr('class')).split(' ')[0].replace('tab-content-','');
            // add class=empty on navigation and content
            $(tabElement).find('.tabs-navigation>ul>li').eq(position-1).addClass('empty');
            $(tabElement).find('.tabs-content>ul>li').eq(position-1).addClass('empty');
        }
    });
}


De foutopsporingsfunctie van IE geeft geen problemen weer, en ook compatibiliteitsweergave helpt niets (in IE 8). De 'empty' class wordt simpelweg niet toegevoegd aan de tabs. Hieronder nog de HTML die doorzocht wordt:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<div class="tabs-navigation">
    <ul>
        <li class="tab-1 current">
            <a href="#tab:tab-1" rel="tab-1" onclick="return false;">
                Mijn tab 1
            </a>
        </li>

        <li class="tab-2">
            <a href="#tab:tab-2" rel="tab-2" onclick="return false;">
                Mijn tab 2
            </a>
        </li>
        
        <li class="tab-3">
            <a href="#tab:tab-3" rel="tab-3" onclick="return false;">
                Mijn tab 3
            </a>
        </li>
        
        <li class="tab-4">
            <a href="#tab:tab-4" rel="tab-4" onclick="return false;">
                Mijn tab 4
            </a>
        </li>
    </ul>
</div>

<div class="tabs-content">
    <ul>
        <li class="tab-content-1">
            <fieldset>
                <legend>Mijn tab 1</legend>
                <div>hoi deze heeft inhoud</div>
            </fieldset>
        </li>
        <li class="tab-content-2">
            <fieldset>
                    <legend>Mijn tab 2</legend>
                    <div>Hoi ook deze heeft inhoud</div>
            </fieldset>
        </li>
        <li class="tab-content-3">
            <fieldset>
                    <legend>Mijn tab 3 zonder inhoud</legend>
            </fieldset>
        </li>
        <li class="tab-content-4">
            <fieldset>
                <legend>Mijn tab 4 zonder inhoud</legend>
            </fieldset>
        </li>
    </ul>
</div>


Zijn er IE / Javascript / Regex goeroes die hier hun licht op kunnen werken?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Wat doe je uberhaupt met die regex en waarom gebruik je niet gewoon jQuery functies als empty() of remove() ?

Edit: ow je verwijdert niks, je bent aan het controleren of die leeg is.. waarom kijk je dan niet naar de inhoud van de elementen ipv naar de html met regex?

Regex heb je eigenlijk nooit nodig bij jQuery in dit soort gevallen, daar heb je juist de uitgebreide queryselector engine voor..

Die heel bak code die je daar geproduceerd hebt is waarschijnlijk gewoon te vervangen met zoiets (ongetest):

JavaScript:
1
2
3
4
$('.tabs-navigation fieldset').each(function(){
   if ($(this).find('*:not(legend)').length > 0)
       $(this).parent().addClass('empty');
});

[ Voor 86% gewijzigd door Bosmonster op 14-12-2009 10:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb hier een oplossing voor je in Mootools die ik eerder had geschreven. Het lijkt op elkaar dus je hoeft alleen een paar functies aan te passen naar de jQeury functionaliteiten:


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$each($$('.tabs-navigation ul li a'),function(a) {
    // Stop de browser default aktie (i.p.v. onclick met return false)
    a.addEvent('click',function(e) {
        e.stop();
    });
    // Kloon DOM element aanmaken
    var cloneElm = $(a.get('rel')).clone().getChildren('fieldset')[0];

    // Verwijder de legend in de kloon
    cloneElm.getChildren('legend').dispose();

    // Trim witruimtes en tab ruimtes en check of die leeg is
    if(cloneElm.get('html').clean() == "") {
        $(a.get('rel')).addClass('empty');
    }
});

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    <div class="tabs-navigation">
        <ul>
            <li class="tab-1 current">
                <a href="#tab-1" rel="tab-1">Mijn tab 1</a>
            </li>
            <li class="tab-2">
                <a href="#tab-2" rel="tab-2">Mijn tab 2</a>
            </li>
            
            <li class="tab-3">
                <a href="#tab-3" rel="tab-3">Mijn tab 3</a>
            </li>
            
            <li class="tab-4">
                <a href="#tab-4" rel="tab-4">Mijn tab 4</a>
            </li>
        </ul>
    </div>

    <div class="tabs-content">
        <ul>
            <li id="tab-1">
                <fieldset>
                    <legend>Mijn tab 1</legend>
                    <div>hoi deze heeft inhoud</div>
                </fieldset>
            </li>
            <li id="tab-2">
                <fieldset>
                        <legend>Mijn tab 2</legend>
                        <div>Hoi ook deze heeft inhoud</div>
                </fieldset>
            </li>
            <li id="tab-3">
                <fieldset>
                        <legend>Mijn tab 3 zonder inhoud</legend>
                </fieldset>
            </li>
            <li id="tab-4">
                <fieldset>
                    <legend>Mijn tab 4 zonder inhoud</legend>
                </fieldset>
            </li>
        </ul>
    </div>



Succes!

[ Voor 22% gewijzigd door Verwijderd op 14-12-2009 15:49 . Reden: overbodige dingetjes aangepast + uitleg JS ]