php在编写代码时一行长度不够自动换行了提示expecting ;,window_javascript 一个自定义长度的文本自动换行的函数,很多朋友在制作网页过程中总 - phpStudy...

javascript 一个自定义长度的文本自动换行的函数

很多朋友在制作网页过程中总是发现某些时候一些英文会把原来好好的表格撑开而导致变形,虽然可以使用style="table-layout:fixed;word-wrap:break-word;word-break:break-all" 来解决这个问题,但有些时候会导致内容显示不完整而被隐藏了起来,并没有做到自动换行的效果。

于是偶就想写一个这样的函数来修补这个缺陷,这个函数很简单,但这里只是提供一种思路来解决这个问题。

function fnAddBr(id, iPerLineLen){.....}

id为要修改的文本块的id,iPerLineLen为每行的长度

Untitled Document

//函数功能:在指定长度处自动添加换行符,以英文长度为准,及8代表8个英文或4个汉字

function fnAddBr(id, iPerLineLen){

var sStr=document.getElementById(id).innerHTML;

if(sStr.replace(/[^\x00-\xff]/g,"xx").length <= iPerLineLen){

return -1;

}

var str="";

var l=0;

var schar;

for(var i=0;schar=sStr.charAt(i);i++){

str+=schar;

l+=(schar.match(/[^\x00-\xff]/)!=null?2:1);

if(l>= iPerLineLen){

str+="
\n";

l=0;

}

}

document.getElementById(id).innerHTML=str;

}

我在做网页的时候添加的内容在生成网页后总是横向把表格撑的很宽,很难看;

我在加了

style="table-layout:fixed;word-wrap:break-word;word-break:break-all"

这个代码后,表格倒是不会撑宽了,可是内容又显示不完全了,只是显示表格一样的宽度的内容,其他的被遮挡或是过滤掉了。

我的是汉字,这个有关系吗?

请问有什么方法可以让在表格中的文字到多少字的时候就自动换一行?或是能换行又不撑大表格,而且不略去内容!

我的内容是在动易中调用的这个标签!

我在做网页的时候添加的内容在生成网页后总是横向把表格撑的很宽,很难看;

我在加了

style="table-layout:fixed;word-wrap:break-word;word-break:break-all"

这个代码后,表格倒是不会撑宽了,可是内容又显示不完全了,只是显示表格一样的宽度的内容,其他的被遮挡或是过滤掉了。

我的是汉字,这个有关系吗?

请问有什么方法可以让在表格中的文字到多少字的时候就自动换一行?或是能换行又不撑大表格,而且不略去内容!

我的内容是在动易中调用的这个标签!

fnAddBr("content",25);

fnAddBr("content1",50);

相关阅读:

MySQL 存储过程的基本用法介绍

用vbs实现选择颜色

用js实现QQ在线查询功能

Pattern Modifiers - 规则表达式的修饰符

解决Windows7播放器出现爆音、杂音的现象

ASP编程入门进阶(十六):FSO组件之驱动器操作

Jmail组件发送邮件之绝对能用的函数

vista 蓝屏怎么处理?

Javascript循环绑定事件的示例代码

比较详细PHP生成静态页面教程

Ajax留言本源码 提供下载了

vbs实现右键菜单中添加CMD HERE

体验Windows 7的“开始”菜单的搜索功能

跟我学MS SQL Server 3

表达式语法分析器是一个程序,它可以解析并计算数学表达式。它的实现原理如下: 1. 词法分析:将输入的字符串分解成多个单词,如标识符、常量、运算符等。这个过程称为词法分析。 2. 语法分析:将分解后的单词按照规则组合成语法树。这个过程称为语法分析。在语法分析过程,会检查表达式是否有语法错误,例如括不匹配或者操作符使用不正确等。如果有错误,则会提示用户。 3. 计算表达式:在语法分析完成后,将语法树上的节点进行计算,得出表达式的结果。 C++代码实现示例: ```cpp #include <iostream> #include <string> #include <map> #include <stack> #include <vector> #include <cmath> using namespace std; // 定义词法分析的单词类型 enum TokenType { TOK_IDENTIFIER, // 标识符 TOK_CONSTANT, // 常数 TOK_PLUS, // + TOK_MINUS, // - TOK_MULTIPLY, // * TOK_DIVIDE, // / TOK_LEFTPAREN, // ( TOK_RIGHTPAREN, // ) TOK_UNKNOWN // 未知类型 }; // 定义语法树节点类型 enum NodeType { NODE_CONSTANT, // 常数节点 NODE_IDENTIFIER, // 标识符节点 NODE_UNARYOP, // 一元运算符节点 NODE_BINARYOP, // 二元运算符节点 NODE_FUNCTION_CALL // 函数调用节点 }; // 定义运算符的优先级 map<TokenType, int> OperatorPrecedence = { {TOK_PLUS, 1}, {TOK_MINUS, 1}, {TOK_MULTIPLY, 2}, {TOK_DIVIDE, 2} }; // 定义词法分析器 class Lexer { public: Lexer(string input) : input(input) {} // 获取下一个单词 TokenType getNextToken(string& tokenValue) { tokenValue = ""; // 跳过空格 while (pos < input.length() && isspace(input[pos])) { pos++; } if (pos >= input.length()) { return TOK_UNKNOWN; } // 判断单词类型 if (isalpha(input[pos])) { // 标识符 while (pos < input.length() && (isalnum(input[pos]) || input[pos] == '_')) { tokenValue += input[pos]; pos++; } return TOK_IDENTIFIER; } else if (isdigit(input[pos])) { // 常数 while (pos < input.length() && (isdigit(input[pos]) || input[pos] == '.')) { tokenValue += input[pos]; pos++; } return TOK_CONSTANT; } else { // 运算符或括 switch (input[pos]) { case '+': pos++; return TOK_PLUS; case '-': pos++; return TOK_MINUS; case '*': pos++; return TOK_MULTIPLY; case '/': pos++; return TOK_DIVIDE; case '(': pos++; return TOK_LEFTPAREN; case ')': pos++; return TOK_RIGHTPAREN; default: pos++; return TOK_UNKNOWN; } } } private: string input; int pos = 0; }; // 定义语法树节点 class ASTNode { public: ASTNode(NodeType type, string value = "") : type(type), value(value) {} NodeType getType() const { return type; } double evaluate() const { switch (type) { case NODE_CONSTANT: return stod(value); case NODE_IDENTIFIER: return variables[value]; case NODE_UNARYOP: if (value == "-") { return -child->evaluate(); } else { return child->evaluate(); } case NODE_BINARYOP: switch (value[0]) { case '+': return left->evaluate() + right->evaluate(); case '-': return left->evaluate() - right->evaluate(); case '*': return left->evaluate() * right->evaluate(); case '/': return left->evaluate() / right->evaluate(); default: throw "Unknown operator: " + value; } default: throw "Unknown node type"; } } // 释放语法树的内存 void free() { if (child) { child->free(); delete child; child = nullptr; } if (left) { left->free(); delete left; left = nullptr; } if (right) { right->free(); delete right; right = nullptr; } } string value; // 值 ASTNode* child = nullptr; // 子节点 ASTNode* left = nullptr; // 左子节点 ASTNode* right = nullptr; // 右子节点 private: NodeType type; static map<string, double> variables; // 变量表 }; map<string, double> ASTNode::variables; // 定义语法分析器 class Parser { public: Parser(string input) : lexer(input) {} ASTNode* parse() { auto rootNode = parseExpression(); if (currentToken != TOK_UNKNOWN) { throw "Unexpected token: " + currentToken; } return rootNode; } private: // 解析表达式 ASTNode* parseExpression(int precedence = 0) { auto leftNode = parsePrimary(); while (true) { auto token = lexer.getNextToken(currentTokenValue); auto tokenPrecedence = OperatorPrecedence[token]; if (tokenPrecedence == 0 || tokenPrecedence <= precedence) { break; } lexer.getNextToken(currentTokenValue); if (token == TOK_MINUS) { // 一元运算符 auto unaryNode = new ASTNode(NODE_UNARYOP, "-"); unaryNode->child = leftNode; leftNode = unaryNode; } else { // 二元运算符 auto binaryNode = new ASTNode(NODE_BINARYOP, currentTokenValue); binaryNode->left = leftNode; binaryNode->right = parseExpression(tokenPrecedence); leftNode = binaryNode; } } return leftNode; } // 解析基础表达式 ASTNode* parsePrimary() { auto token = lexer.getNextToken(currentTokenValue); ASTNode* node = nullptr; switch (token) { case TOK_IDENTIFIER: // 标识符 node = new ASTNode(NODE_IDENTIFIER, currentTokenValue); break; case TOK_CONSTANT: // 常数 node = new ASTNode(NODE_CONSTANT, currentTokenValue); break; case TOK_LEFTPAREN: // 括 node = parseExpression(); if (lexer.getNextToken(currentTokenValue) != TOK_RIGHTPAREN) { throw "Expecting right parenthesis"; } break; default: throw "Unexpected token: " + token; } return node; } Lexer lexer; TokenType currentToken = TOK_UNKNOWN; string currentTokenValue; }; int main() { while (true) { cout << "> "; string input; getline(cin, input); if (input == "quit") { break; } try { Parser parser(input); auto rootNode = parser.parse(); cout << rootNode->evaluate() << endl; rootNode->free(); delete rootNode; } catch (const char* error) { cout << error << endl; } } return 0; } ``` 上述代码实现了一个简单的表达式语法分析器,支持基本的运算符和括,并可以计算表达式的结果。其,关键的步骤包括词法分析、语法分析、语法树构建和表达式求值。在词法分析,程序首先会跳过空格,然后根据字符类型确定单词类型,例如标识符、常数、运算符或括等。在语法分析,程序将单词组合成语法树,判断表达式是否符合语法规则,并检查是否有语法错误。在语法树构建完成后,程序对语法树进行遍历,计算表达式的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值