如何合并两个div样式?

时间:2017-02-13 15:14:53

标签: jquery html css

我有一个包含单个孩子的HTML标记,并且每个都有一个样式。

<div style="font-size:12px;color:red">
   <div style="color:blue">...</div>
</div>

我想合并这两个标签而不改变结果。我的意思是儿童风格必须打败父母风格。在这种情况下,结果必须是:

<div style="font-size:12px;color:blue">...</div>

我该怎么做?

修改

我有两个cssText,我想将它们合并为一个字符串,将它们作为样式attr。 在上面的例子中,我有 var st1=font-size:12px;color:red;var st2=color:blue; 我想将st1和st2合并为优先级。

2 个答案:

答案 0 :(得分:1)

html

<div id=parent style="font-size:12px; color:red">
   <div id="child" style="color:blue">text</div>
</div>

我添加了ID只是为了便于抓取这些元素,还有很多其他方法可以实现。

这里是JS

parentClass = document.getElementById("parent").style.cssText;
childClass = document.getElementById("child").style.cssText;

document.getElementById("parent").style.cssText = parentClass+childClass;

以非常容易理解的方式编写代码。现在,父元素将同时包含父类和子类。如果任何类重复,那么将应用子类的样式,因为它是最后写的(这就是CSS的工作方式)。

最后,如果需要,可以使用removeChild()删除子元素。

答案 1 :(得分:0)

mergeStyledElements函数中使用jQuery选择器。将子项设置为primary,将父项设置为secondary,它将文本从子项推送到父项,删除子项,并将包含子项样式的样式组合在父项上。

var pushStyleStrings = function(str1, str2){
	let styleStr = '';	
	function format(str){
		let rtn = {};
		str = str.replace(/\s+|\;$/g,'').split(';');
		$.each(str,function(k,v){ 
			rtn[v.split(':')[0]] = v.split(':')[1];
		});
		return rtn;
	}
	function zipObj( obj1, obj2 ){
		rtn = obj2;
		$.each(obj1,function(k,v){
			rtn[k] = v;
		});
		return rtn;
	}
	$.each(zipObj(format(str1),format(str2)),function(k,v){
		styleStr += k + ":" + v + ";";
	});
	
	return styleStr;
	
}

var mergeStyledElements = function( primary, secondary ){
  
  let $primary = $(primary),
      $secondary = $(secondary),
      $style = pushStyleStrings( $primary.attr('style'), $secondary.attr('style')),
      $text = $primary.text();

      $secondary.html($text).css($style);
}

mergeStyledElements('#primary', '#secondary');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="secondary" style="font-size:12px;color:red;">
   <div id="primary" style="color:blue;">...</div>
</div>