1

我昨天开始使用 jQuery 和 JavaScript,但遇到了错误。

我想要的只是在 H1 标记之后随机放置广告(假设页面上有 10 个 H1 被 2 = 5 AdPosition 潜水)现在在随机选择的 H1 之后添加 5 个 AdBlock。

听起来很简单,但我无法做到这一点...:/ 因为 jQuery 或 myCode 只粘贴一个 AdBlock。

JsFiddle: http: //jsfiddle.net/byt3w4rri0r/eCBCK/ - 工作!


我的HTML:

<body>
<div id="content-inner">
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
    <h1 class="headline">Headline</h1>
</div>
</body>​

MyJQUERY/JavaScript:

//count H1
var countH1 = parseFloat($("#content-inner h1").length)-1; //-1 because 0 is also a number!

//how often the ads should be displayed
var ad_count = Math.round(countH1 / 2);

//random helper
var min = 0;
var max = countH1;

//random position
for (counter = 0; counter < ad_count; counter++){
    var random_position = Math.round((Math.random() * (max - min)) + min);

    console.log("Random_Position:", random_position);

    // paste google-code

    if ($(".headline").hasClass('advertised') == true) {
        random_position++;

        console.log('already advertised!')

        if (random_position > countH1) {
            random_position--;
            }
    } else {
        $('h1:eq('+random_position+')').append('<div class="google_ad1"></div>');
        $('h1.headline').addClass('advertised');
        }
}

console.log("CountH1 -1, because 0=1, 1=2,....", countH1);
console.log(werbung_anzahl);
console.log(zufall_position);
console.log(counter);
4

3 回答 3

1

有了这条线

if ($(".headline").hasClass('advertised') == true)

您正在检查是否有任何(!) .headline 元素已被宣传。在第一步之后,总会有一个 .headline 被宣传,所以这个比较是正确的。

你想做什么:检查当前索引的 .headline 是否已经被广告

if ($(".headline").eq(random_position).hasClass('advertised') == true)

最重要的是,您正在将“广告”类添加到所有(!)您的 h1.headline 元素。这就是你想要做的

$('h1.headline').eq(random_position).addClass('advertised');

编辑:这是来自http://jsfiddle.net/eCBCK/19的最新小提琴的完整更改 for 循环

for (counter = 0; counter < ad_count; counter++){
    var random_position = Math.round((Math.random() * (max - min)) + min);

    console.log("Random_Position:", random_position);

    // paste google-code

    if ($(".headline").eq(random_position).hasClass('advertised') == true) {
        counter--;

        console.log('already advertised!')


    } else {
        $('h1:eq('+random_position+')').append('<div class="google_ad1"></div>');
        $('h1.headline').eq(random_position).addClass('advertised');
        }
}
于 2012-10-02T09:28:33.970 回答
0

如果我错了,有人纠正我,但是您正在向所有 h1 元素添加“广告”类,这意味着在第二个循环中,您正在测试广告是否已经添加到 h1,现在将始终是true 并且不再添加添加

于 2012-10-02T09:28:36.643 回答
0

使用 jQuery 的链接功能:

$('h1:eq('+random_position+')').append('<div class="google_ad1"></div>').addClass('advertised');

这只会将advertised类添加到您刚刚附加到的 H1 中。

于 2012-10-02T09:36:48.923 回答