2011-06-10 61 views
0

如果我有一個名爲#container的容器div,其中包含一堆.inside div,我該如何去檢查某個指定內容的.inside div(只是一串英文文本)是否存在?我這樣做是爲了防止我爲網站設置的通知系統中出現重複。我不需要實際的文本 - 只是它是否存在。另外,如果發現它能夠修改.inside div的內容,那麼這樣做會很好,所以我可以遞增並顯示消息發生的次數(如果您喜歡,可以分組)。是否存在某些內容的div

感謝,

詹姆斯

回答

1

要檢查是否存在

$("#container .inside:contains('old text')").size() > 0 

修改文本

$("#container .inside:contains('old text')").text('new text'); 
+0

@melhosseniny - 我不認爲你需要檢查這裏的大小或長度,因爲如果它返回空白將不會有文本改變。 – natedavisolds 2011-06-10 17:14:09

+0

非常感謝 - 正是我期待的! – Bojangles 2011-06-10 17:52:35

2

使用contains-selector[docs],那麼length[docs]屬性,看看有多少被發現。

var some_string = "test"; 

var els_with_string = $('#container .inside:contains(' + some_string + ')'); 

    // use .length to check to see if there was at least one 
if(els_with_string.length) { 
    alert("at least one already exists"); 
} 

從文檔:

說明:選擇包含指定文字的所有元素。

匹配文本可以直接出現在所選元素,任何元素的後代或其組合中。與屬性值選擇器一樣,contains()的括號內的文本可以寫成單詞或用引號包圍。文本必須有匹配的案例才能被選中。


對於如果找到修改的內容,這將取決於你想要做什麼樣的修改。我不確切地知道你的意思是分組。


編輯:關於你的評論,你可以完成你所需要的是這樣的:

var error = "ERROR:SomeError "; 
var el_with_error = $('#container .inside:contains(' + error + ')'); 

if (el_with_error.length) { 
    var text = el_with_error.text(); 
    if (/\(\d+\)/.test(text)) { 
     var new_text = text.replace(/\((\d+)\)/, function(s, g1) { 
      g1++; 
      return "(" + g1 + ")"; 
     }); 
     el_with_error.text(new_text); 
    } else { 
     el_with_error.text(text + " (2)"); 
    } 
} else { 
    $('#container').append('<div class="inside">' + error + '</div>'); 
} 

活生生的例子:http://jsfiddle.net/ScZbV/

我們可以不經常獲得通過表達式,如果您能夠將分組數量包裝在<span>元素中。

var error = "ERROR:SomeError "; 
var el_with_error = $('#container .inside:contains(' + error + ')'); 

if (el_with_error.length) { 
    var span = el_with_error.find('span'); 
    if (span.length) { 
     var num = +span.text(); 
     span.text(++num); 
    } else { 
     el_with_error.append(" (<span>2</span>)"); 
    } 
} else { 
    $('#container').append('<div class="inside">' + error + '</div>'); 
} 

實施例:http://jsfiddle.net/ScZbV/1/

+0

假設用戶點擊相同的按鈕兩次,併產生相同的錯誤。相反追加另一個錯誤的單子,我想只加一點'(2)'在現有的錯誤和閃爍的背景作爲關注焦點。這就是我所說的分組。對不起,我還不夠清楚! – Bojangles 2011-06-10 16:33:01

+0

@JamWaffles:我會在一分鐘內用更精確的解決方案進行更新。 – user113716 2011-06-10 18:33:07

+0

非常感謝您的努力帕特里克:-)我真的很感激它。我得到了它自己的工作,謝天謝地(我不明白它足夠)使用正則表達式。我會不止一次地讚揚你,但是你不夠好! – Bojangles 2011-06-10 21:04:08

2

我喜歡使用選擇器(他人使用.filter,這是同樣一個選項)。

$(".inside:contains('waldo')").css({color: 'red'}); 

這是區分大小寫的。

+0

謝謝nate :-)這很好。 – Bojangles 2011-06-10 17:52:53

1

這裏是看它的方式略有不同...

的應用類名每個「類型」的通知。因此,您的通知標記的樣子:

<div class="inside error">Error</div>

然後找這些div內的字符串中,使用這些新類的名字,你的優勢,並利用.find的()。如果jQuery返回一個對象,那麼它存在,所以做一些事情。但是,如果它什麼都不返回,那就添加它

實施例:http://jsbin.com/imexi4

+0

感謝amustill,但是這不是我正在尋找的行爲,因爲可以有多個相同類型的通知,但是不存在_duplicate_通知。 – Bojangles 2011-06-10 17:52:02

相關問題