2014-01-29 2 views
1

С приведенным ниже кодом для скрипта Tampermonkey, я уверен, что если возвращаемое значение равно -1 (как и по умолчанию, учитывая пример ниже), тогда не должно быть никакого Qtip.
Однако этот код по-прежнему создает Qtips для элементов, которые в противном случае были бы дефолтными с текстовым значением -1. Может кто-нибудь объяснить, почему это происходит?Qtip все еще выполняется, хотя я не прошу об этом?

// headers that work fine 

$(function() { 
    GM_addStyle(GM_getResourceText('qtipCSS')); 

    var makeConfig = function(jqObject){    
     var playerName = $(jqObject).text() || -1; 
     var argumentMsg = '<a href="javascript:openQuickMsgDialog(' + '&quot;' + playerName + '&quot;' + ');" style="font-size:10px; "> [m] </a>' 
     var argumentBuff = '<a href="javascript:openWindow(' + '&quot;' + 'index.php?cmd=quickbuff&t=' + playerName + '&quot;' + ', \'fsQuickBuff\', 618, 1000, \',scrollbars\');" style="font-size:10px;"> [b] </a>' 

     var finalText = playerName + '<br/>' + '<div style = "text-align: center; color: white !important;">' + argumentMsg + argumentBuff + '</div>'; 

     var qtipContent = { 
      overwrite: false, 
      content: { text: finalText, attr: 'error' }, 
      position: { my: 'bottom center', at: 'top center' }, 
      show: { delay: 200 }, 
      hide: { fixed: true, delay: 200 }, 
      style: { classes: 'qtip-tipsy qtip-shadow' } 
     } 
     return qtipContent; 
    }; 

    $('[href *= "index.php?cmd"]').each(function(){  
     var config = makeConfig($(this)); 
     if (config.content.text == -1) 
      return; 
     else if (config.content.text != -1){ 
      $(this).qtip(config); 
     }  
    }); 
}); 

Пример правильного выбора (что, как предполагается, чтобы дать мне имя игрока и делает):

$('[href *= "index.php?cmd"]').eq(1)

[ 
<a href=​"index.php?cmd...">​NameOfPlayer​</a>​ 
] 

Пример выбора, который должен быть обработан до -1, а затем не созданный в виде всплывающей подсказки, но это не так.

$('[href *= "index.php?cmd"]').eq(0)

[ 
<a href=​"index.php?cmd..." data-hasqtip=​"0">​ 
<img src=​"someplace">​ 
</a>​ 
] 

Обратите внимание, я удалил некоторые из встроенных тегов в обоих <a> и <img> тегах соответственно. Я не думаю, что это должно сыграть какую-либо роль, так как $(string).text() должен полностью удалить теги, но при необходимости я могу добавить теги еще раз.

Спасибо!

ответ

1

Логика finalText неверна и никогда не вернется только -1.

Не фильтруйте Qtip таким образом, во всяком случае. Гораздо лучше сделать это в вызывающем цикле. Изменить это:

$('[href *= "index.php?cmd"]').each(function(){  
    var config = makeConfig($(this)); 
    if (config.content.text == -1) 
     return; 
    else if (config.content.text != -1){ 
     $(this).qtip(config); 
    }  
}); 


к этому:

$('[href *= "index.php?cmd"]').each(function(){  
    if (this.textContent.trim()) { 
     var config = makeConfig ($(this)); 
     $(this).qtip(config); 
    } 
}); 
+0

Спасибо Брок. Не могли бы вы прояснить некоторые вещи? Лучше ли фильтровать в вызывающем цикле из-за производительности или просто стиля (или обоих?). Почему оператор 'if' использует' this' вместо '$ (this)'? Кроме того, как любопытство, знаете ли вы, почему я видел «-1» в qtip? Благодаря! – Vasu

+0

Оба. Кроме того, другим людям (или вам, через шесть месяцев) известно, что это за цель. ... «это» для производительности. В этом случае вы ничего не получаете с помощью '$ (this)'. ... Также вы не должны повторять '$ (this)' как это. Установите его в переменную и используйте это. ... В Qtip вы должны увидеть -1, но за ним должен быть HTML, не обязательно видимый. Это не '== -1', поэтому вы не можете использовать это для' if() 'check. –

+0

Получил, спасибо. – Vasu

Смежные вопросы