2013-10-23 86 views
0

我有這樣的代碼。現在,我想與條件替換類名「內容」舊值:如果該值在類在排列價值的一致下面,然後追加到它喜歡:(例)用條件追加到同一個類?

<div class="content">style1</div> 
<div class="content">Stackover</div> 
<div class="content">style3</div> 
<div class="content">somthing</div> 
<div class="content">style1</div> 

<script> 
var styletodisplay = ["style1", "style2", "style3"]; 
for(m = 0; m < styletodisplay.length; m++) 
{ 
    //if the value get from class "content" coincides with one of the value in Array then append to that class(not for all) with HTML : <p>styleN is added</p> 
    //For example : if the value get from class "content" is style3, then you need to append to that class a HTML like : <p>style3 is added</p> 
} 
</script> 

這意味着,我們有結果:

<div class="content"><p>style1 is added</p></div> 
    <div class="content">Stackover</div> 
    <div class="content"><p>style3 is added</p></div> 
    <div class="content">somthing</div> 
    <div class="content"><p>style1 is added</p></div> 

我該怎麼做?我知道我們應該使用「ID」作爲唯一,但是HTML代碼是阻止的,只有類是允許的。幫我解決這個問題。由於

+0

查找範圍的DOM元素的內容是什麼?具體問題是什麼? –

+0

@DaveNewton:如果該類具有Array中的某個值,則只需進行替換。 –

回答

2

HTML和腳本:

<div class="content">style1</div> 
<div class="content">Stackover</div> 
<div class="content">style3</div> 
<div class="content">somthing</div> 
<div class="content">style1</div> 

<script> 
// Append containts() function to all array 
Array.prototype.contains = function(obj) { 
    var i = this.length; 
    while (i--) { 
     if (obj === this[i]) { 
      return true; 
     } 
    } 
    return false; 
} 

// Get all div .content 
var els = document.querySelectorAll(".content"); 

var styletodisplay = ["style1", "style2", "style3"]; 
for(m = 0; m < els.length; ++m) { 
    var inner = els[m].innerHTML; 

    // if inner div is one of styletodisplay 
    if(styletodisplay.contains(inner)) { 
     els[m].innerHTML = '<p>' + inner + ' is added</p>'; 
    } 
} 
</script> 

結果以HTML:

<div class="content"><p>style1 is added</p></div> 
<div class="content">Stackover</div> 
<div class="content"><p>style3 is added</p></div> 
<div class="content">somthing</div> 
<div class="content"><p>style1 is added</p></div> 

的的jsfiddle:http://jsfiddle.net/4Rgdy/

+0

感謝您的建議。我在試着回答。 –

+0

對不起。如果我想要結果,如,那怎麼辦?再次感謝您的幫助。 –

+1

而不是'

style1加入

'? –

1

我自己的方法(雖然它需要跟上時代的瀏覽器) :

function addFoundStyle(el, styles){ 
    var textProp = 'textContent' in document ? 'textContent' : 'innerText', 
     text = el[textProp].trim(), 
     para = document.createElement('p'), 
     foundAt = styles.indexOf(text); 
    if (foundAt > -1) { 
     para.appendChild(document.createTextNode(styles[foundAt] + ' is added')); 
     el.classList.add(styles[foundAt]); 
     el.appendChild(para); 
    } 
} 

styles = ['style1', 'style3']; 

[].forEach.call(document.querySelectorAll('div.content'), function(a){ 
    addFoundStyle(a, styles); 
}); 

JS Fiddle demo

如果您願意替換元素的文本內容(而不是附加一個段落的元素):

function addFoundStyle(el, styles){ 
    var textProp = 'textContent' in document ? 'textContent' : 'innerText', 
     text = el[textProp].trim(), 
     para = document.createElement('p'), 
     foundAt = styles.indexOf(text); 
    if (foundAt > -1) { 
     para.appendChild(document.createTextNode(styles[foundAt] + ' is added')); 
     el.classList.add(styles[foundAt]); 
     el.replaceChild(para, el.firstChild); 
    } 
} 

styles = ['style1', 'style3']; 

[].forEach.call(document.querySelectorAll('div.content'), function(a){ 
    addFoundStyle(a, styles); 
}); 

JS Fiddle demo

順便提及,一個簡單的jQuery溶液:

var styles = ['style1','style2','style3']; 

$('div.content').text(function(i,t){ 
    var text = $.trim(t), 
     style = styles.indexOf(text); 
    $(this).addClass(styles[style]); 
    return style > -1 ? styles[style] + ' is added' : t; 
}); 

JS Fiddle demo

參考文獻:

+0

你很好。非常感謝。 –

+1

你真的很受歡迎。 –

+0

對不起。如果我想要結果,如,那怎麼辦?再次感謝大衛。 –

1

如果你不介意一些jQuery的:

這裏有一個小提琴:http://jsfiddle.net/D6SxQ/4/

HTML

<div class="content">style1</div> 
<div class="content">Stackover</div> 
<div class="content">style3</div> 
<div class="content">somthing</div> 
<div class="content">style1</div> 

的JavaScript

var styletodisplay = ["style1", "style2", "style3"]; 

$('.content').each(function(i,el){ 
    var pos = styletodisplay.indexOf($(el).text()); 
    if (pos > -1) { 
     $(this).html("<p>" + styletodisplay[pos] + " is added</p>"); 
    } 
}); 

結果

<div class="content"><p>style1 is added</p></div> 
<div class="content">Stackover</div> 
<div class="content"><p>style3 is added</p></div> 
<div class="content">somthing</div> 
<div class="content"><p>style1 is added</p></div> 
+0

感謝您的幫助。抱歉。如果我想要結果像

。怎麼做? –

+0

您確定要在每個DOM元素中使用腳本塊嗎?這非常不尋常。你究竟想要完成什麼?你只是試圖給每個內容塊添加一個類?更像

style1
colbydauph

+0

這聽起來像你想要的東西是這樣的:[http://jsfiddle.net/Wp6es/1/](http://jsfiddle.net/Wp6es/1/) – colbydauph