기능을 먼저 주세요.
varaddSheet=function(){ vardoc,cssCode; if(arguments.length==1){ doc=document; cssCode=arguments[0] }elseif(arguments.length==2){ doc=arguments[0]; cssCode=arguments[1]; }else{ alert("addSheet函数最多接受两个参数!"); } if(!+"v1"){//增加自动转换透明度功能,用户只需输入W3C的透明样式,它会自动转换成IE的透明滤镜 vart=cssCode.match(/opacity:(d?.d+);/); if(t!=null){ cssCode=cssCode.replace(t[0],"filter:alpha(opacity="+parseFloat(t[1])*100+")") } } cssCode=cssCode+" ";//增加末尾的换行符,方便在firebug下的查看。 varheadElement=doc.getElementsByTagName("head")[0]; varstyleElements=headElement.getElementsByTagName("style"); if(styleElements.length==0){//如果不存在style元素则创建 if(doc.createStyleSheet){//ie doc.createStyleSheet(); }else{ vartempStyleElement=doc.createElement('style');//w3c tempStyleElement.setAttribute("type","text/css"); headElement.appendChild(tempStyleElement); } } varstyleElement=styleElements[0]; varmedia=styleElement.getAttribute("media"); if(media!=null&&!/screen/.test(media.toLowerCase())){ styleElement.setAttribute("media","screen"); } if(styleElement.styleSheet){//ie styleElement.styleSheet.cssText+=cssCode; }elseif(doc.getBoxObjectFor){ styleElement.innerHTML+=cssCode;//火狐支持直接innerHTML添加样式表字串 }else{ styleElement.appendChild(doc.createTextNode(cssCode)) } }
때때로 .js 파일의 문서에 일부 CSS 스타일을 동적으로 도입해야 하는 경우가 있습니다. 일부 짧은 CSS 코드의 경우 이는 처리하기 쉽습니다.
varddd=document.getElementById("ddd"); ddd.style.border="1pxsolidred";
더 길더라도 상관없습니다.
varddd=document.getElementById("ddd"); ddd.style.cssText="border:1pxsolidred;color:#000;background:#444;float:left";
functionaddSheetFile(path){ varfileref=document.createElement("link") fileref.rel="stylesheet"; fileref.type="text/css"; fileref.href=path; fileref.media="screen"; varheadobj=document.getElementsByTagName('head')[0]; headobj.appendChild(fileref); }
이 함수는 IE에서 약간 번거롭습니다. 나는 항상 그것을 지원하는 브라우저의 기본 기능을 사용해 왔으며 바이너리 코드를 직접 사용하는 것이 가장 효율적입니다.
varoStylesheet=document.createStyleSheet(sURL,iIndex);
createStyleSheet의 두 매개변수는 선택사항입니다.
하지만 우리 스타일이 특정 페이지에만 고유하고 관리자만 사용할 수 있고 페이지의 해당 부분이 동적으로 생성된다면 처음부터 도입해야 합니까? 로드하려면 특수 파일을 만들어야 합니까? 가장 좋은 방법은 이러한 스타일을 동적 스크립트와 함께 묶는 것입니다. 이 기능은 이러한 목적으로 개발되었습니다.
솔직히 말하면 원래 서식 있는 텍스트 편집기용으로 개발되었습니다. 우리 모두 알고 있듯이 서식 있는 텍스트 입력 상자를 사용하는 가장 인기 있는 방법은 입력할 내용을 iframe에 넣는 것입니다. 여기에는 두 가지 유형의 문서가 포함됩니다. 하나는 메인 페이지의 문서이고 다른 하나는 문서입니다. iframe의 iframe 문서에도 호환성 문제가 있습니다.
variframe=document.createElement('iframe');//편집용 richtexteditor 생성
variframeDocument=iframe.contentDocument||iframe.contentWindow.document;
...
간단히 말해서 함수의 초기 결정은 다음과 같습니다. 이 두 가지 서류가 준비되어 있습니다. 관련된 iframe이 없으면 하나의 매개변수만 전달하면 됩니다. 마지막 매개변수는 항상 CSS 문자열입니다.
그런 다음 styleSheet 요소를 동적으로 생성하고 이 요소에 CSS 문자열을 추가하는 문제가 있습니다. 물론 현 단계에 있는 것이 있다면 기성품을 사용하는 것은 물론이다. DOM 요소가 많을수록 브라우저에 부담이 커집니다. document.styleSheets 메소드를 생각합니다. 스타일 요소 및 링크 요소를 포함한 컬렉션을 반환하며 다음과 같은 호환성 문제도 포함합니다.
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns=" <head> <metahttp-equiv="content-type"content="text/html;charset=UTF-8"/> <%#强制IE8像IE7一样呈现网页-%> <metahttp-equiv=”X-UA-Compatible”content=”IE=EmulateIE7″/> <%#--默认所有的链接都在本窗口打开-%> <basetarget="_self"/> <title><%=h(yield(:title))||controller.action_name%></title> <%=stylesheet_link_tag"screen","button","style"%> <linkrel="stylesheet"href="/stylesheets/print.css"type="text/css"media="print"> <!--[ifltIE8]> <linkrel="stylesheet"href="/stylesheets/ie.css"type="text/css"media="screen"> <![endif]--> <%=javascript_tag"window._token='#{form_authenticity_token}'"ifActionController::Base.allow_forgery_protection%> <%=javascript_include_tag:defaults%> <styletype="text/css"media="print"></style> </head>
위에서 테스트하려면 경고(document.styleSheets.length)를 사용하고 W3C 브라우저는 5를 반환합니다. 따라서 거부되었습니다. 그리고 외부 링크가 아닌 스타일 요소만 사용합니다. 판단의 두 번째 부분은 헤드의 스타일 요소에 대한 것입니다. 존재하지 않으면 새로 만듭니다. 그런 다음 첫 번째 스타일 요소에 CSS 문자열을 추가하기만 하면 됩니다.
다음으로 안전 잠금 장치를 추가해야 합니다. 왜냐하면 media="print"일 때 정의된 효과는 페이지가 인쇄될 때만 유효하기 때문입니다. 첫 번째 스타일 요소의 미디어 값이 화면과 달라지는 것을 방지하기 위해 변경해야 합니다.
위 내용은 CSS 스타일 코드 예제를 추가하기 위해 자바스크립트 함수를 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!