2013-10-23 125 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