javascript - create - innerhtml
Obtenga DocType de un HTML como cadena con Javascript (5)
¿Es eso lo que estás buscando?
alert(document.doctype.publicId);
Sé que puedo acceder al objeto doctype a través de document.doctype
o document.childNodes[0]
pero mi problema es obtener doctype como una cadena. Puedo hacer esto en Chrome y Safari llamando a document.doctype
que devuelve <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
. Sin embargo, en Firefox, al llamar a document.doctype
devuelve el objeto DocumentType.
¿Hay alguna manera de obtener la cadena del doctype en todos los navegadores como en Chrome y Safari?
¡Gracias!
Concatenar DocumentType.name
, .publicId
y .systemId
. Algo como:
''<!DOCTYPE ''+
DocumentType.name+'' PUBLIC "''+ //maybe you should check for publicId first
DocumentType.publicId+''" "''+
DocumentType.systemId+''">''
En todos los navegadores compatibles (incluido Chrome / Safari), document.doctype
también devuelve un objeto DocumentType
. El siguiente código se puede usar para generar una cadena DOCTYPE válida.
var node = document.doctype;
var html = "<!DOCTYPE "
+ node.name
+ (node.publicId ? '' PUBLIC "'' + node.publicId + ''"'' : '''')
+ (!node.publicId && node.systemId ? '' SYSTEM'' : '''')
+ (node.systemId ? '' "'' + node.systemId + ''"'' : '''')
+ ''>'';
Este método devuelve la cadena correcta para doctypes válidos (HTML5) , por ejemplo:
-
<!DOCTYPE html>
-
<!DOCTYPE html SYSTEM "about:legacy-compat">
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
Explicación del código:
node.name # Holds the name of the root element, eg: HTML / html
node.publicId # If this property is present, then it''s a public document type.
#>Prefix PUBLIC
!node.publicId && node.systemId
# If there''s no publicId, but a systemId, prefix SYSTEM
node.systemId # Append this if present
También puede usar este trazador de líneas para obtener el tipo de documento actual. Esto funcionará en cualquier navegador moderno e IE 9 y superior .
new XMLSerializer().serializeToString(document.doctype);
function get_doctype()
{
var doctype =
''<!DOCTYPE '' +
document.doctype.name +
(document.doctype.publicId?'' PUBLIC "'' + document.doctype.publicId + ''"'':'''') +
(document.doctype.systemId?'' "'' + document.doctype.systemId + ''"'':'''') + ''>'';
return doctype;
}