2015-02-07 30 views
1

我有一個簡單的功能,我想運行3次。而不是使用相同的函數,我想創建某種類型的IF語句,表示如果banner = banner類,那麼variable =相關變量。jQuery - 如果元素=(類)然後變量=(變量)

我只是不知道如何說出我的if。

任何幫助將是偉大的!

var $banner1 = 'Some Text', 
    $banner2 = 'Some More Text', 
    $banner3 = 'Even More Text', 
    $someText; 

    if ($('.banner-01')) { 
     var $someText = $banner1; 
    } 

    if ($('.banner-02')) { 
     var $someText = $banner2; 
    } 

    if ($('.banner-03')) { 
     var $someText = $banner3; 
    } 

$('.banner-01 .info').each(function(){ 
    $(this).html($someText); 

}); 

$('.banner-02 .info').each(function(){ 
    $(this).html($someText); 
}); 

$('.banner-03 .info').each(function(){ 
    $(this).html($someText); 
}); 
+0

你發佈的代碼沒什麼意義 - 你能詳細說明你到底想要做什麼嗎? '$ banner1'(它只是一個字符串變量)和'$('。banner-01')'是一種jQuery方法,它將使用'.banner- 01級? – 2015-02-07 22:16:22

+0

@AntP - 對不起 - 所以如果橫幅的類爲.banner-01,那麼var $ someText = $ banner1;對於2和3等等。實質上是這樣的,橫幅使用相同的功能,但變量取決於它的標題。我只是不確定如何正確編寫if語句。 – Nick 2015-02-07 22:19:25

+0

'$('。banner-01')'總是一個真正的對象。 – Oriol 2015-02-07 22:23:26

回答

2

根本不需要if語句。

你想要的是迭代每個類與每個類,並將文本設置爲適當的變量。

$('.banner-01')通過「banner-01」類獲取所有元素的數組。然後,您可以使用each爲每個這些執行的操作,就像這樣:

var $banner1 = 'Some Text', 
    $banner2 = 'Some More Text', 
    $banner3 = 'Even More Text', 
    $someText; 

$('.banner-01').each(function() { 
    $(this).html($banner1); 
}); 

$('.banner-02').each(function() { 
    $(this).html($banner2); 
}); 

$('.banner-03').each(function() { 
    $(this).html($banner3); 
}); 

然後,您炒掉一個方法一次,而不是一次每個元素

在分鐘,$someText總是最終成爲'Even More Text'(因爲$('.banner-03')總是會返回一個值,因此病情會評估爲true)。一旦$someText已被設置3次並達到其最終值,然後您將瀏覽每個課程的所有元素,並將它們全部設置爲'Even More Text'

通過以下代碼來說明這個問題:

var $banner1 = 'Some Text', 
    $banner2 = 'Some More Text', 
    $banner3 = 'Even More Text', 
    $someText; 

if ($('.banner-01')) { 
    // 1. Sets $someText to 'Some Text' 
    var $someText = $banner1; 
} 

if ($('.banner-02')) { 
    // 2. Sets $someText to 'Some More Text' 
    var $someText = $banner2; 
} 

if ($('.banner-03')) { 
    // 3. Sets $someText to 'Even More Text' 
    var $someText = $banner3; 
} 

// From this point on, $someText is 'Even More Text'. 

$('.banner-01 .info').each(function(){ 
    // 4. Sets elements with banner-01 class to 'Even More Text' 
    $(this).html($someText); 

}); 

$('.banner-02 .info').each(function(){ 
    // 5. Sets elements with banner-02 class to 'Even More Text' 
    $(this).html($someText); 
}); 

$('.banner-03 .info').each(function(){ 
    // 6. Sets elements with banner-03 class to 'Even More Text' 
    $(this).html($someText); 
}); 
0

假設我理解你想要做什麼,我想這會工作:

var $banner1 = 'Some Text', 
$banner2 = 'Some More Text', 
$banner3 = 'Even More Text', 

if ($('.banner-01')) { 
    $('.banner-01 .info').each(function(){ 
     $(this).html($banner1); 
    }); 
} 

if ($('.banner-02')) { 
    $('.banner-02 .info').each(function(){ 
     $(this).html($banner2); 
    }); 
} 

if ($('.banner-03')) { 
    $('.banner-03 .info').each(function(){ 
     $(this).html($banner3); 
    }); 
} 

而實際上你不甚至不需要if語句,因爲如果元素沒有找到,你將有一個空的數組,並且each函數將被跳過。

0

你可以嘗試類似下面的代碼。這將增加無論您擁有多少條橫幅都能工作的優勢。

var banners = ["Some Text", "Some More Text", "Even More Text"]; // Store banner text in an array. 
for(var counter = 0; counter < banners.length; counter++) { 
    var sel = ".banner-"; // Set selector prefix 
    if(counter < 10) sel += "0"; // Add 0 if less than 10 
    sel += counter + " .info"; // Add suffix 
    $(sel).html(banners[counter]); // Set banner html 
}